Для видалення всіх записів в усіх таблицях, крім системних, ви можете використовувати наступний 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.