Mar*_*kov 6 postgresql inheritance
我正在使用继承,但最终遇到了问题。
如果我运行:
select count(*) from estate_properties where id = 86820;
Run Code Online (Sandbox Code Playgroud)
我得到 1。
但是当我尝试运行它时:
insert into property_images (binary_image, name, property_id) values (16779, 'IMG_0096.jpg', 86820)
Run Code Online (Sandbox Code Playgroud)
我得到:
********** 错误 **********
错误:插入或更新表“property_images”违反外键约束“property_images_property_id_fkey” SQL 状态:23503 详细信息:表“estate_properties”中不存在键 (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
Run Code Online (Sandbox Code Playgroud)
显然答案在这里:
外键可以指向属于继承层次结构一部分的表,但它只能准确地在该表中查找行。不在任何父表或子表中。要查看外键看到的行,请执行 SELECT * FROM ONLY thetable。ONLY 关键字的意思是“忽略继承”,这就是外键查找的作用
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |