首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行“授予数据库连接”时,“行太大(.)最大大小8160”

运行“授予数据库连接”时,“行太大(.)最大大小8160”
EN

Stack Overflow用户
提问于 2019-07-18 05:12:18
回答 1查看 3K关注 0票数 3

我和postgres 11面临着奇怪的问题。

我正在创建一群用户,然后给他们分配一些角色,同时也让他们连接到特定的数据库。

在成功创建2478个角色之后,当我尝试创建新用户时,我会得到以下错误:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-18 07:17:03

您自己找到了解决方案,让我来解释一下错误的原因:

每个表行都存储在表的一个8KB块中,因此这是它的大小限制。

普通的表有一个吐司表,其中长的属性可以存储在行外.这允许PostgreSQL存储非常长的行。

现在,系统目录表没有烤面包表,因此行的大小限制在8KB以内。

对象的访问控制列表存储在对象的目录中,因此表上的许多权限可能会超出限制。

很高兴--如果您必须单独管理数千名用户的权限,那么您最终将在DBA地狱中结束。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57087519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档