Напоминание, осторожность!
Перед использованием не забудьте попробовать это в явной транзакции, чтобы проверить, выполняет ли оператор именно то, что вы хотели, и ничего более.Вы можете начать транзакцию с помощью BEGIN;
и сохранить ее с помощью COMMIT;
.Если что-то пойдет не так, вы всегда можете откатить его вручную, используя ROLLBACK;
Документы по теме: транзакции
Solution / 1
Использование DROP TABLE ... CASCADE
удалит таблицу и ALL объекты, которые зависят от нее (представления, ограничения внешнего ключа ...), перечислив их как NOTICE
в выводе (по крайней мере, в psql):
-- Replace table_name with the name of your parent table
DROP TABLE table_name CASCADE;
Цитируя здесь руководство, выделите жирным шрифтом:
(...), чтобы уронить стол на который ссылается представление или ограничение внешнего ключа другой таблицы, CASCADE должно быть указано .(CASCADE полностью удаляет зависимое представление, но в случае внешнего ключа оно удаляет только ограничение внешнего ключа, но не другую таблицу полностью.)
Solution / 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;
Документы, связанные с: ограничение удаления