我有表
Advisor
,它是一个特殊的 User
,仅包含 id
和 user_id
(目前!),我正在尝试使用以下脚本使 user_id
成为外键:
ALTER TABLE advisor
ADD CONSTRAINT advisor_user_id_fkey
FOREIGN KEY (user_id) REFERENCES "user" (id);
我认为应该有效,但是我收到此错误:
ERROR: insert or update on table "advisor" violates foreign key constraint "advisor_user_id_fkey"
SQL state: 23503
Detail: Key (user_id)=(44) is not present in table "user".
我认为这很奇怪,因为我说它应该指的是
user.id
而不是user.user_id
,但显然我做错了。
有人对此有任何想法吗?谢谢。
更新:如果有人想知道为什么是“user”而不是user,那么pgAdmin不喜欢user,因为它认为它是数据库的所有者。
您的错误消息表明 您的“顾问”表 (44) 中有一个条目,但您的“用户”表中不存在该条目。
您的外键是在“advisor”上定义的,并规定“user”表是父表。也许您已经向后定义了外键?
关于“user”问题,“user”是一个保留字,这就是 pgadmin 遇到问题的原因。如果你有能力改变这一点,我推荐它。请参阅保留字:http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html。
这里顾问表的外键(user_id)指向用户表的键(id)。 检查您的用户表的键(id)是否存在以及您在顾问表中更新的值。