Eva*_*oll 2 postgresql temporary-tables
为什么临时表不能引用 PostgreSQL 中的非临时表?当我运行以下
CREATE TABLE foo ( a int PRIMARY KEY );
CREATE TEMP TABLE bar ( a int REFERENCES foo );
Run Code Online (Sandbox Code Playgroud)
我明白了,
错误:对临时表的约束只能引用临时表
我认为这曾经有效,所以我回到 PostgreSQL 8.4 并且我看到即使那时它曾经出错,
错误:无法从临时表约束引用永久表
这是为什么?为什么临时表不能引用非临时表。
外键约束有两个方面:
Postgres 通过在两个表上安装触发器来执行存在检查来实现这一点。但是,如果子表是临时表,则父触发器根本无法工作:触发器需要为所有数据库用户触发以保证参照完整性,但临时表数据仅在创建它的会话中可见,因此不能强制执行约束。
即使有可能,也可能有点过于侵入性;很少DELETE会因为其他用户从临时数据集中引用它而导致父级失败。但是,如果您真的需要在这种情况下保持完整性,您可以通过使用SELECT ... FOR KEY SHARE.
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |