当我尝试向 Postgres 中的现有表添加约束时,为什么会收到 SQL state:23503?

问题描述 投票:0回答:2

我有表

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,因为它认为它是数据库的所有者。

sql postgresql foreign-keys constraints
2个回答
3
投票

您的错误消息表明 您的“顾问”表 (44) 中有一个条目,但您的“用户”表中不存在该条目。

您的外键是在“advisor”上定义的,并规定“user”表是父表。也许您已经向后定义了外键?

关于“user”问题,“user”是一个保留字,这就是 pgadmin 遇到问题的原因。如果你有能力改变这一点,我推荐它。请参阅保留字:http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html


0
投票

这里顾问表的外键(user_id)指向用户表的键(id)。 检查您的用户表的键(id)是否存在以及您在顾问表中更新的值。

© www.soinside.com 2019 - 2024. All rights reserved.