2014-02-20 139 views
0

我使用COPY命令在數據庫中加載一堆數據,然後創建主鍵和外鍵。Postgres:違反外鍵約束

當我創建了一個外鍵時,我收到了錯誤消息:violates foreign key constraint "some_fkey"。有沒有一種方法可以提高日誌級別,以便我可以看到發生這種違規事件的行,以便我可以返回並調試/檢查數據?

+1

PostgreSQL的哪個版本? –

回答

2

一種解決方法:

假設你的表是這樣的:

CREATE TABLE a (a_id INTEGER PRIMARY KEY, x TEXT); 
CREATE TABLE b (b_id INTEGER PRIMARY KEY, a_id INTEGER, x TEXT); 

而下面的外鍵的創建爲您提供了錯誤:

ALTER TABLE b ADD CONSTRAINT a_a_id_fk FOREIGN KEY (a_id) REFERENCES a (a_id) ON UPDATE CASCADE ON DELETE RESTRICT; 

您可以加入兩個表得到有問題的行:

SELECT b_id, a_id FROM b LEFT JOIN a USING (a_id) WHERE a.a_id IS NULL; 

讓我們來看看!

的樣本數據:

INSERT INTO a VALUES (1, 'a'), (2, 'b'), (3, 'c'); 
INSERT INTO b VALUES (1, 1, 'x'), (2, 3, 'y'), (3, 1000, 'z'); 

而且上面的查詢結果:

b_id | a_id 
------+------ 
    3 | 1000 
(1 row) 
+0

當然,輝煌的答案!謝謝 – samol