Как удалить несколько таблиц с внешними ключами в PostgreSQL?

Я знаю синтаксис для удаления нескольких таблиц:

DROP TABLE foo, bar, baz;

Но в моем случае 3 таблицы с внешними ключами между ними и с другими таблицами, которые нельзя удалять.

  • Table1: Внешние ключи Из Table2, Table3, еще 3 таблицы в базе данных.
  • Таблица 2: Внешние ключи Из таблицы 3 еще 2 таблицы в базе данных.
  • Таблица 3: Внешние ключи Из еще 3 таблиц в базе данных.

Итак, как я могу удалить эти 3 таблицы? У них есть данные в таблицах. Будет ли приведенный выше синтаксис работать, игнорируя внешние ключи? Не должно быть несоответствия данных в других таблицах базы данных.


person Somnath Muluk    schedule 14.03.2013    source источник
comment
Как вы могли себе представить удаление таблиц, на которые ссылаются, без потери согласованности данных?!   -  person Kouber Saparev    schedule 14.03.2013
comment
@KouberSaparev: Я имею в виду, что после удаления этих 3 таблиц они не должны влиять на другие таблицы в базе данных, так как теперь не будет никаких отношений.   -  person Somnath Muluk    schedule 14.03.2013


Ответы (2)


Вы можете указать Postgres автоматически удалять все внешние ключи, ссылающиеся на эти таблицы, используя ключевое слово cascade:

DROP TABLE foo, bar, baz CASCADE;
person a_horse_with_no_name    schedule 14.03.2013

Обычно,

У вас будет вероятность несогласованности, если первичные ключи Table1, Table2 и Table3 упоминаются как внешние ключи в любых других таблицах базы данных.

Если у вас есть, самый безопасный способ удалить эти таблицы

сначала отбросьте ограничения в этих таблицах с помощью -

ALTER TABLE table_name DROP CONSTRAINT "table_name_id_fkey";

а затем удалить эти таблицы одну за другой.

person Piyas De    schedule 14.03.2013