PostgreSQL 9.2行过大报错,9.6.8及以上版本是否已修复该问题?
PostgreSQL 9.6.8及以上版本对"行过大"权限授予问题的修复情况
这个问题是PostgreSQL早期版本(比如你正在用的9.2)里的一个典型已知缺陷:当某个对象(比如你的my_schema)被授予权限的角色数量过多时,存储权限信息的系统表行大小会超过PostgreSQL默认的8164字节行大小限制,从而触发ERROR: row is too big: size 8168, maximum size 8164这个错误。
好消息是,PostgreSQL开发团队已经在9.6.8版本及所有后续更高版本(包括10及以上全系列)中彻底修复了这个bug。修复的核心逻辑是重构了权限信息的存储方式:不再把所有授权角色的信息都塞进单个系统表行,而是改用了一种支持拆分存储的高效结构,完美适配大量角色授权的场景。
如果你升级到9.6.8或更高版本,再执行你之前的操作:
CREATE ROLE my_user; GRANT USAGE on schema my_schema to my_user;
就不会再碰到这个行过大的错误了。
顺便提个临时 workaround(如果暂时没法升级的话):可以创建一个角色组,把所有需要访问该schema的角色都加入这个组,然后只给这个角色组授予my_schema的USAGE权限。这样系统表只需要存储组的权限信息,就能绕开行大小限制的问题。不过这只是权宜之计,升级到修复后的版本才是彻底解决问题的最优方案。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

