Для відключення/включення всіх зовнішніх ключів (foreign keys) в усіх не системних таблицях в PostgreSQL 16, ви можете використовувати хранимі процедури. Ось як ви можете створити процедури для цього:
1. Створіть храниму процедуру для відключення всіх зовнішніх ключів:
CREATE OR REPLACE PROCEDURE disable_all_foreign_keys()
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`))
LOOP
-- Вимкнення всіх зовнішніх ключів в таблиці
EXECUTE `ALTER TABLE public.` || current_table_name || ` DISABLE TRIGGER ALL`;
END LOOP;
END;
$$;
2. Створіть храниму процедуру для включення всіх зовнішніх ключів:
CREATE OR REPLACE PROCEDURE enable_all_foreign_keys()
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`))
LOOP
-- Включення всіх зовнішніх ключів в таблиці
EXECUTE `ALTER TABLE public.` || current_table_name || ` ENABLE TRIGGER ALL`;
END LOOP;
END;
$$;
3. Тепер ви можете викликати ці хранимі процедури для відключення або включення всіх зовнішніх ключів:
-- Відключити всі зовнішні ключі
CALL disable_all_foreign_keys();
-- Включити всі зовнішні ключі
CALL enable_all_foreign_keys();
Ці хранимі процедури дозволяють вам вимикати і включати всі зовнішні ключі в усіх не системних таблицях у схемі "public". Важливо бути дуже обережним і робити резервне копіювання даних перед виконанням подібних операцій, оскільки це може вплинути на цілісність даних в вашій базі даних.
Автор: Рудюк С.А. 2023. K2 Cloud ERP.