【问题标题】:How to drop multiple tables having foreign keys in PostgreSQL?如何在 PostgreSQL 中删除多个具有外键的表?
【发布时间】:2013-03-02 11:00:28
【问题描述】:

我知道删除多个表的语法是:

DROP TABLE foo, bar, baz;

但在我的例子中,有 3 个表之间有外键,并且还有其他不会被删除的表。

  • 表 1:表 2、表 3、数据库中另外 3 个表的外键。
  • 表 2:外键来自表 3,数据库中还有 2 个表。
  • 表 3:外键来自数据库中的另外 3 个表。

那么我怎样才能删除这 3 个表呢?他们在表格中有数据。上面的语法会忽略外键吗?数据库中其他表不应有任何数据不一致。

【问题讨论】:

  • 你怎么能想象在不丢失数据一致性的情况下删除引用的表?!
  • @KouberSaparev:我的意思是删除这 3 个表后,它们不应该影响数据库中的其他表,因为现在不会保留任何关系。

标签: sql postgresql sql-drop


【解决方案1】:

您可以使用 cascade 关键字告诉 Postgres 自动删除引用这些表的所有外键:

DROP TABLE foo, bar, baz CASCADE;

【讨论】:

    【解决方案2】:

    通常,

    如果Table1、Table2和Table3的主键在数据库中的任何其他表中被引用为外键,您将有可能出现不一致。

    如果你有,删除这些表的最安全方法是

    首先在这些表中删除约束 -

    ALTER TABLE table_name DROP CONSTRAINT "table_name_id_fkey";
    

    然后一一删除这些表。

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2015-04-15
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多