簡體   English   中英

PostgreSQL約束錯誤

[英]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上閱讀了這些線程,但是我不完全理解他們在說什么:

PostgreSQL約束問題

PostgreSQL約束

是什么導致錯誤:沒有唯一的約束條件匹配給定表的鍵?

我希望有人能幫助我。 我對Postgres非常陌生,並不完全了解外鍵的工作方式。

干杯

在(引用的)表vulling您需要外鍵具有vulling值。 但是你沒有。 您具有三元組(vulling, put, spoor)唯一值,這並不意味着對(spoor, vulling)

考慮

vulling
======================
vulling | put | spoor
----------------------
1       | 0   | 0
1       | 1   | 0

那兩行三重方面,而且不是一對是潮頭vullingspoor 最后,您應該將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM