PostgreSQL创建关联其他表主键的表时报外键列不存在错误怎么解决?
问题排查与解决办法
报错原因
你遇到的42703错误核心原因是:定义ingredient_to_unit_relations表的外键约束时,指定了当前表的关联字段为id,但该表的字段定义中没有创建名为id的列,数据库无法找到对应字段完成外键关联。
外键约束的逻辑是:先在当前子表创建和父表主键类型一致的关联字段,再将该字段声明为外键指向父表的主键。你直接跳过了创建关联字段的步骤,直接声明外键引用不存在的列,因此触发报错。
修正后的SQL语句
DROP TABLE IF EXISTS ingredient_to_unit_relations; DROP TABLE IF EXISTS ingrediens; CREATE TABLE ingrediens ( id serial, name_of_ingredient varchar(255), price_per_unit int, PRIMARY KEY (id) ); CREATE TABLE ingredient_to_unit_relations ( ingredient_relation_id int GENERATED ALWAYS AS IDENTITY, -- 先创建存储关联食材表主键的字段,类型要和父表主键(serial本质是int)一致 ingredient_id int NOT NULL, PRIMARY KEY (ingredient_relation_id), constraint Fk_ingredient_id -- 外键关联的是当前表刚创建的ingredient_id字段,指向ingrediens表的id FOREIGN KEY (ingredient_id) REFERENCES ingrediens (id) );
额外注意事项
- 外键字段的类型必须和被引用的父表主键类型完全匹配,比如父表主键是
serial(底层为int),子表的外键字段也必须是int类型。 - 从你的表名
ingredient_to_unit_relations判断,该表是食材和单位的多对多关联表,后续如果要关联单位表,还需要按照同样逻辑新增unit_id字段,再声明对应外键即可。
内容的提问来源于stack exchange,提问作者user12675913
相关产品推荐
相关产品推荐

