我和postgres 11面临着奇怪的问题。
我正在创建一群用户,然后给他们分配一些角色,同时也让他们连接到特定的数据库。
在成功创建2478个角色之后,当我尝试创建新用户时,我会得到以下错误:
db=# create user foo;
CREATE ROLE
db=# grant connect on database db to foo;
ERROR: row is too big: size 8168, maximum size 8160
在db日志中也会出现相同的错误。
我检查了db卷是否没有耗尽空间,还有1T的空间.
我无法想象postgres在运行简单授权时试图插入超过8k .?
编辑:
似乎已经提出了类似的问题(模式上的使用权限):
ERROR: row is too big: size 8168, maximum size 8164
因此,解决方案是创建一个角色,比如connect_to_my_db
,并授予连接到该角色,然后,而不是运行GRANT connect
给每个用户做GRANT connect_to_my_db
。
发布于 2019-07-18 07:17:03
您自己找到了解决方案,让我来解释一下错误的原因:
每个表行都存储在表的一个8KB块中,因此这是它的大小限制。
普通的表有一个吐司表,其中长的属性可以存储在行外.这允许PostgreSQL存储非常长的行。
现在,系统目录表没有烤面包表,因此行的大小限制在8KB以内。
对象的访问控制列表存储在对象的目录中,因此表上的许多权限可能会超出限制。
很高兴--如果您必须单独管理数千名用户的权限,那么您最终将在DBA地狱中结束。
https://stackoverflow.com/questions/57087519
复制相似问题