是否可以有一个指向系统目录(pg_catalog)表字段的外键?
当我尝试以下操作时:
ALTER TABLE my_table ADD CONSTRAINT fk_my_table FOREIGN KEY (role_name) REFERENCES pg_roles(rolname) ON UPDATE CASCADE;
我得到:
ERROR: referenced relation "pg_roles" is not a table
是否可以有一个指向系统目录(pg_catalog)表字段的外键?
当我尝试以下操作时:
ALTER TABLE my_table ADD CONSTRAINT fk_my_table FOREIGN KEY (role_name) REFERENCES pg_roles(rolname) ON UPDATE CASCADE;
我得到:
ERROR: referenced relation "pg_roles" is not a table
这是不可能的。
如果您正在尝试使用系统表,您将收到类似的错误
********** Error **********
ERROR: permission denied: "pg_attribute" is a system catalog
SQL state: 42501
即使您覆盖权限,系统也不会强制执行约束。所以我们不能用系统表引用创建约束。
如果您的角色很少,则进行手动检查或从 pg_roles 创建临时表,然后进行约束。
create temp table test1 as select * from pg_roles