[英]PostgreSQL constraint error
我有這個錯誤:
ERROR: there is no unique constraint matching given keys for referenced table "vulling"
這是我制作外鍵的代碼:
ALTER TABLE put_25_vlak_1_spoor
ADD FOREIGN KEY (spoor,vulling)
REFERENCES vulling(spoor,vulling);
這些表是這樣制作的:
CREATE TABLE put_25_vlak_1_spoor
(
id serial NOT NULL,
geometry_spoor geometry(MultiPolygon,28992),
spoor integer NOT NULL,
put integer,
vlak integer,
vulling integer NOT NULL,
CONSTRAINT put_25_vlak_1_spoor_pkey PRIMARY KEY (spoor, vulling)
)
CREATE TABLE vulling
(
vlak smallint,
textuur character varying(8),
vulling integer NOT NULL,
spoor integer NOT NULL,
put integer NOT NULL,
CONSTRAINT vulling_pkey PRIMARY KEY (vulling, put, spoor)
)
我在stackoverflow上閱讀了這些線程,但是我不完全理解他們在說什么:
我希望有人能幫助我。 我對Postgres非常陌生,並不完全了解外鍵的工作方式。
干杯
在(引用的)表vulling
您需要外鍵具有vulling
值。 但是你沒有。 您具有三元組(vulling, put, spoor)
唯一值,這並不意味着對(spoor, vulling)
。
考慮
vulling
======================
vulling | put | spoor
----------------------
1 | 0 | 0
1 | 1 | 0
那兩行三重方面,而且不是一對是潮頭vulling
和spoor
。 最后,您應該將UNIQUE(vulling, spoor)
添加到表定義中,或者使用helper-table管理多對多關系。
或者,您可以反轉外鍵定義:
ALTER TABLE vulling
ADD FOREIGN KEY (spoor,vulling)
REFERENCES put_25_vlak_1_spoor(spoor,vulling);
您在匯總表中是否有數據? 如果在刪除中不存在相同的數據,則不能將數據添加到put_25_vlak_1_spoor中。
即,如果要向put_25_vlak_1_spoor添加一條記錄,其中spoor = 111和vulling = 222,則必須在其中將spoor = 111和vulling = 222作為一行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.