【问题标题】:Can I have a foreign key to a parent table in PostgreSQL?我可以在 PostgreSQL 中拥有父表的外键吗?
【发布时间】:2018-04-19 03:49:11
【问题描述】:

我正在使用继承,但最终遇到了问题。

如果我跑:

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) “房地产属性”。

ID 上的 estate_properties 也是 SERIAL

注意:另一个表apartments 继承自estate_properties,并添加了86820。那会有什么不同吗?还有为什么我在父表中仍然有 ID,我可以从那里选择。

编辑: 仔细查看文档:

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

我想实现这个:


5.9.1。注意事项

  • 指定另一个表的列 REFERENCES city(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 我已经添加了它。我觉得很好。

标签: postgresql inheritance


【解决方案1】:

显然答案就在这里:

Foreign keys + table inheritance in PostgreSQL?

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

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 2022-11-24
    • 2012-03-30
    • 2021-08-17
    • 2019-07-11
    • 1970-01-01
    • 2021-07-06
    • 2010-10-06
    相关资源
    最近更新 更多