i-M*_*nus 2 postgresql postgresql-9.2
如何在Postgres中的数据库角色中添加外键?
CREATE TABLE "public"."role_info" (
"last_login" timestamptz,
"user" name,
CONSTRAINT "role_info" FOREIGN KEY ("user") REFERENCES "pg_catalog"."pg_authid" ("rolname") ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);
Run Code Online (Sandbox Code Playgroud)
这是拒绝返回权限。
你不知道 您不能在当前实现中添加引用系统目录的外键。
即使稍后对某些目录放松了限制pg_role,所有DB共享的全局目录之类的全局目录也可能仍然受到限制。
您可以使用触发器来单向实施关系,从而阻止您添加引用不存在的系统目录条目的值。但是,您不能停止删除目录条目,因此它仅是有限的实用程序。
围绕PostgreSQL 12版本编辑2019:
您不能执行此操作的原因有很多。
系统以多种方式使系统目录关系特殊化,从而使其表现出特殊的行为:*有时对它们进行就地更新,这是用户关系所不允许的,并且在事务中止时不能回滚*通常访问通过一层间接和缓存(syscache和relcache)对它们进行更新*它通过特殊的轻量级访问方法(genam)对它们进行更新,该方法不支持PostgreSQL的许多高级功能,并且对性能,内存进行了许多简化的假设使用和代码复杂性的原因。
此外,如果pg_catalog.pg_authid是共享关系,可以通过选中查看select relisshared from pg_catalog.pg_class where oid = 'pg_catalog.pg_authid'::regclass。这意味着将相同的表内容映射到PostgreSQL实例(“集群”或数据目录)上的所有数据库中。有没有有FK到合理的方式,因为这是引用它的关系将在仅存pg_catalog.pg_class的一个数据库,因此会包含其行堆-而是引用 pg_catalog.pg_authid堆将被映射到所有数据库。连接到一个数据库的postgres后端甚至不知道FK约束是否存在于另一个数据库上,也无法检查。
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |