Pre-loader

/ K2 Cloud ERP for Python / Адміністраторам / Підтримка баз даних. / Postgresql. / Різні задачі по Postgresql / Як видалити всі записи в усіх таблицях бази даних Postgresql

Як видалити всі записи в усіх таблицях бази даних Postgresql

Для видалення всіх записів в усіх таблицях, крім системних, ви можете використовувати наступний SQL-запит та храниму процедуру. Проте варто пам'ятати, що така операція може бути дуже ризикованою, і вона призведе до видалення всіх даних з таблиць, тому завжди робіть резервне копіювання даних перед виконанням подібних операцій.

Ось приклад хранимої процедури, яка видаляє всі записи в усіх не системних таблицях у схемі "public":

CREATE OR REPLACE PROCEDURE delete_all_records_except_system()
LANGUAGE plpgsql
AS $$
DECLARE
    current_table_name text; -- Змінна для збереження назви поточної таблиці
BEGIN
    -- Перебираємо всі таблиці в схемі "public", крім системних
    FOR current_table_name IN (SELECT table_name FROM information_schema.tables WHERE table_schema = `public` AND table_type = `BASE TABLE` 
                        AND table_name NOT LIKE `pg_%` AND table_name NOT IN (`information_schema`, `pg_stat_statements`, `pg_buffercache`))
    LOOP
        -- Формуємо і виконуємо DELETE-запит для кожної таблиці
        EXECUTE `DELETE FROM public.` || current_table_name;
    END LOOP;
END;
$$;

Ця процедура використовує динамічний SQL для виконання DELETE-запиту для кожної таблиці в схемі "public". Викликайте цю процедуру, щоб видалити всі записи в усіх таблицях цієї схеми:

CALL delete_all_records_except_system();

Пам'ятайте, що ця операція безповоротно видаляє всі дані з таблиць, і вам потрібно бути дуже обережними при її виконанні.

Автор: Рудюк С.А. 2023. K2 Cloud ERP.