2013-10-03 57 views
0

我在使用posgresql的項目中使用了繼承的表。如何在postgresql的繼承表上添加外鍵約束?

類似的東西:

create table root 
(
    id bigserial, 
    some_data text, 
    ... 
); 

create table leaf_a 
(
    data2 text 
) inherits(root); 

create table leaf_b 
(
    maybe_other_data text 
) inherits(root); 

一切偉大的工程至今。

但我最近添加一個表,就是如果在leaf_a和leaf_b使用一個一對一的關係,所以我喜歡創建:

create table conf 
(
    id bigserial, 
    root_id bigint, 
    more_data text 
); 

到目前爲止好,但現在我想創建一個約束:

alter table conf 
    add constraint plop foreign key (root_id) references root (id); 

Postgres讓我創建約束。

所以我加了一些數據:

insert into leaf_a (some_data, data2) values ('...', '...'); 

比方說,該ID生成(從根表的ID)是42,我現在希望將數據添加到表中的conf:

insert into conf (root_id, more_data) values (42, '...'); 

這裏是問題所在,postgres告訴我,表中沒有id = 42的數據。

好的,那麼我該如何解決這個問題?

在此先感謝。

+2

你已閱讀文檔章節數據定義/繼承/注意事項?它在這種情況下提到了限制。 –

+0

好的,我已經切換了conf,root和葉子之間的鏈接。現在我對每個葉表和根進行約束。 –

+1

@iXô它適合你嗎?如果是的話,你可以添加這個答案並接受它嗎? –

回答

0

重新設計數據庫模式(root有一個鏈接conf表,所以做leaf_a和leaf_b),並添加3個約束(在root,leaf_a和leaf_b上)適用於我。