Напоминание, осторожно!
Перед использованием обязательно попробуйте это в явной транзакции, чтобы проверить, делает ли оператор именно то, что вы хотели, и ничего больше. Вы можете начать транзакцию с помощью BEGIN;
и сохранить ее с помощью COMMIT;
. Если что-то пойдет не так, вы всегда можете откатить его вручную с помощью ROLLBACK;
Связанные документы: транзакции
Решение/1
Использование DROP TABLE ... CASCADE
удалит таблицу и ВСЕ< /strong> объекты, которые зависят от него (представления, ограничения внешнего ключа...), перечисляя их как NOTICE
в выводе (по крайней мере, в psql):
-- Replace table_name with the name of your parent table
DROP TABLE table_name CASCADE;
Цитирование руководства здесь, жирный акцент мой:
(...) чтобы удалить таблицу, на которую ссылается представление или ограничение внешнего ключа другой таблицы, необходимо указать CASCADE . (CASCADE полностью удалит зависимое представление, но в случае внешнего ключа он удалит только ограничение внешнего ключа, а не всю другую таблицу.)
Решение/2
Если вы предпочитаете делать что-то вручную (когда вы не знаете объем зависимостей вашей таблицы), отмените ограничения, которые у вас есть на дочерние таблицы, и удалите родительскую таблицу, как обычно.
Как правило, вы будете выполнять следующие операции:
-- Replace object names to suit your case
-- Dropping foreign key constraint on child table pointing to parent table
ALTER TABLE child_table DROP CONSTRAINT constraint_name;
-- Repeat above for all constraints in all child tables
-- Drop the parent table
DROP TABLE parent_table;
Связанные документы: ограничение удаления
person
Kamil Gosciminski
schedule
26.09.2018