为什么临时表不能引用 PostgreSQL 中的非临时表?当我运行以下
CREATE TABLE foo ( a int PRIMARY KEY );
CREATE TEMP TABLE bar ( a int REFERENCES foo );
我明白了,
错误:临时表的约束可能只引用临时表
我认为这曾经可以工作,所以我回到 PostgreSQL 8.4,即使这样我也看到它曾经出错,
错误:无法从临时表约束中引用永久表
这是为什么?为什么临时表不能引用非临时表。
为什么临时表不能引用 PostgreSQL 中的非临时表?当我运行以下
CREATE TABLE foo ( a int PRIMARY KEY );
CREATE TEMP TABLE bar ( a int REFERENCES foo );
我明白了,
错误:临时表的约束可能只引用临时表
我认为这曾经可以工作,所以我回到 PostgreSQL 8.4,即使这样我也看到它曾经出错,
错误:无法从临时表约束中引用永久表
这是为什么?为什么临时表不能引用非临时表。
外键约束有两个方面:
Postgres 通过在两个表上安装触发器来执行存在性检查来实现这一点。但是,如果子表是临时表,则父触发器根本不起作用:触发器需要为所有数据库用户触发以保证引用完整性,但临时表数据仅在创建它的会话中可见,因此无法强制执行约束。
即使有可能,也可能有点太侵入性了。很少需要
DELETE
因为其他用户从临时数据集中引用它而导致父级失败。但是,如果您在这种情况下确实需要保持完整性,您可以通过使用SELECT ... FOR KEY SHARE
.