为什么临时表不能引用PostgreSQL中的非临时表?当我运行以下命令时
CREATE TABLE foo ( a int PRIMARY KEY );
CREATE TEMP TABLE bar ( a int REFERENCES foo );
我明白了,
错误:临时表上的约束只能引用临时表。
我原以为这是有用的,所以我回到了PostgreSQL 8.4,我发现即使在那时,它也是错误的,
错误:无法从临时表约束引用永久表
但为什么要这样?为什么临时表不能引用非临时表。
发布于 2019-05-25 18:07:01
外键约束有两个方面:
Postgres通过在两个表上安装触发器来执行存在性检查来实现这一点。但是,如果子触发器是临时表,则父触发器就不能工作:为了保证引用的完整性,需要为所有数据库用户触发触发器,但是只有在创建临时表的会话中才能看到临时表数据,因此不能强制执行该约束。
即使这是可能的,它也可能有点过于侵入性;仅仅因为其他用户从临时数据集引用它,就很少希望父级的DELETE
失败。但是,如果在这种情况下确实需要保持完整性,则可以通过使用SELECT ... FOR KEY SHARE
锁定父记录来获得相同的效果。
https://dba.stackexchange.com/questions/239060
复制