我可以在PostgreSQL中使用父表的外键吗?

时间:2016-02-17 03:00:57

标签: postgresql inheritance

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

如果我跑:

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   细节:表中没有Key(property_id)=(86820)   “estate_properties”。

IDestate_properties SERIALapartments

注意:另一个表estate_properties继承自CONSTRAINT property_images_property_id_fkey FOREIGN KEY (property_id) REFERENCES estate_properties (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ,并添加了86820。这会有所作为吗?另外,为什么我仍然在父表中有ID,我可以从那里选择。

修改 仔细查看文档:

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

我想实现这个目标:

5.9.1。警告

  
      
  • 指定另一个表的列REFERENCES cities(name)将为
      允许另一个表包含城市名称,但不包含大写名称   这种情况没有好的解决方法。
  •   

EDIT2: 这是外键的声明:

var namespace = {
    test: function() {
         //sample 1
         function nest(param) {
            console.log('a '+ param);
         }
         //sample 2
         this.nest = function(param) {
            console.log('b '+ param);
         }
    }
}

1 个答案:

答案 0 :(得分:1)

显然答案就在这里:

Foreign keys + table inheritance in PostgreSQL?

  

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