我使用COPY命令在数据库中加载一堆数据,然后创建主键和外键。
当我创建其中一个外键时,收到错误消息:violates foreign key constraint "some_fkey"
。有没有办法可以提高日志级别,以便我可以看到此违规发生在哪一行,以便我可以返回并调试/检查数据?
答案 0 :(得分: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)