PostgreSQL中pg_catalog表的外键

时间:2012-09-24 18:27:44

标签: sql postgresql

是否可以将外键指向系统目录(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

1 个答案:

答案 0 :(得分:3)

这是不可能的。
如果你正在尝试系统表,你会得到像

这样的错误
  ********** Error **********
    ERROR: permission denied: "pg_attribute" is a system catalog
    SQL state: 42501

即使您覆盖权限,系统也不会强制执行约束。 所以我们不能用系统表引用创建约束。

如果您的角色很少,那么请从pg_roles进​​行手动检查或创建临时表,然后进行约束。

create temp table test1 as select * from pg_roles