Pre-loader

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

Як відключити/включити всі зовнішні ключі в усіх не системних таблицях Postgresql 16

Як відключити/включити всі зовнішні ключі в усіх не системних таблицях Postgresql 16

Для відключення/включення всіх зовнішніх ключів (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.