2011-12-23 70 views
1

當我在CREATE命令中直接創建具有FK定義的表並且目標表尚不存在時,將導致錯誤。定義不存在目標表的FK

如果目標表存在,可以檢查是否暫停?

我的DBMS是Postgres。

例(僞):

create table "Bar" 
    foo_id integer FK of "Foo"."id", 
    someattr text; 

create table "Foo" 
    id integer; 

例子是在錯誤的順序,這就是爲什麼它不會運行。

我想批量重新創建數據庫,基於許多sql文件中的定義。

回答

2

當我在CREATE命令中直接創建具有FK定義的表並且目標表尚不存在時,會導致錯誤。

如果目標表存在,可以檢查是否暫停?

對付這一點,最好的方式可能是:

  1. 以正確的順序創建表,或
  2. 創建約束 創建表外,創建所有表後。
+1

我會去#2 – Peter 2011-12-23 13:19:31

0

蠻力始終是一種選擇。

繼續運行您的DDL腳本,直到您運行沒有錯誤。

更多的優雅需要對腳本進行順序結構化。

添加存在檢查是可能的,但我不太熟悉postgres元數據。

+0

我認爲ddl命令的正確結構是唯一的方法。首先創建基表,然後使用alter命令添加FK。 – Peter 2011-12-23 13:15:42