我正在使用PostgreSql 9.2 我有很多角色,并且所有角色都被授予了架构的USAGE权限。 当我尝试创建新用户并授予权限时,我收到错误:
CREATE ROLE my_user;
GRANT USAGE on schema my_schema to my_user;
ERROR: row is too big: size 8168, maximum size 8164
我已经阅读了很多关于如何修复它的内容,但这篇文章非常古老。 是否有任何新版本的PostgreSql(9.6.8 +)修复了这个错误?
答案 0 :(得分:1)
这是因为每个新权限都会扩展此架构的nspacl
条目的pg_namespace
列。
现在PostgreSQL中的表块大小为8kB,每个表行必须适合一个块,因此限制。
在普通表中不会出现问题,因为PostgreSQL在所谓的TOAST表中存储了可变长度的“超出行”的超大字段。但系统目录没有TOAST表,因此该转义路径已关闭。
我会说你因为设计不好而遇到了这个限制。不是单独授予每个角色对模式的访问权限,而是使用角色层次结构,将多个角色分配给组,并在组级别授予模式权限。