我能在PostgreSQL中使用外键引用父表吗?

7
我正在使用继承,但遇到了问题。
如果我运行:
select count(*) from estate_properties where id = 86820;

我得到了1。
但是当我尝试运行这个时:
insert into property_images (binary_image, name, property_id) values (16779, 'IMG_0096.jpg', 86820)

我得到的是:

********** 错误 **********

错误:在表“property_images”上插入或更新违反了外键约束“property_images_property_id_fkey” SQL状态:23503 详细信息:关键字(property_id)=(86820)在表“estate_properties”中不存在。

estate_properties表上的IDSERIAL

注意:另一个表 apartments 继承自 estate_properties,并且 86820 被添加到其中。这会有什么影响吗?另外为什么我仍然可以从父表选择 ID。

编辑:更仔细地查看文档:

http://www.postgresql.org/docs/9.5/static/ddl-inherit.html

我想实现这个:


5.9.1. 注意事项

  • 指定另一个表的列 REFERENCES cities(name) 将允许其他表包含城市名称,但不包括首都名称。此情况没有好的解决方法。

EDIT2: 这是外键的声明:

CONSTRAINT property_images_property_id_fkey FOREIGN KEY (property_id)
      REFERENCES estate_properties (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

你能发布外键声明吗? - schtever
@schtever 我已经添加了它。在我看来,它看起来很好。 - Marti Markov
1个回答

6
显然,答案在这里:PostgreSQL中的外键+表继承?

外键可以指向继承层次结构的一部分的表,但它只会精确查找该表中的行。不会查找任何父或子表中的行。要查看外键查找到哪些行,请执行SELECT * FROM ONLY thetable。ONLY关键字表示“忽略继承”,这就是外键查找所做的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接