postgresql - 错误 : row is too big: size 8168, 最大尺寸 8164

标签 postgresql

我正在使用 PostgreSql 9.2 我有很多角色,并且所有角色都已被授予对模式的 USAGE 特权。 当我尝试创建新用户并授予权限时,我收到一条错误消息:

创建角色 my_user; GRANT USAGE 模式 my_schema 到 my_user; 错误:行太大:大小 8168,最大大小 8164

我已经阅读了很多关于如何修复它的文章,但那是一篇非常老的文章。 是否有任何新版本的 PostgreSql (9.6.8 +) 修复了此错误?

最佳答案

这是因为每个新权限都扩展了此架构的 pg_namespace 条目的 nspac 列。

现在 PostgreSQL 中的表 block 大小为 8kB,每个表行必须适合一个 block ,因此有限制。

在普通表中这不是问题,因为 PostgreSQL 在所谓的 TOAST 中存储变长“越界”的超大字段。表。但是系统目录没有 TOAST 表,所以这条逃生路线已经关闭。

我会说你遇到这个限制是因为设计不好。与其单独授予每个角色对架构的访问权限,不如使用角色层次结构,将您的许多角色分配给组并在组级别授予架构权限。

关于postgresql - 错误 : row is too big: size 8168, 最大尺寸 8164,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50016654/

相关文章:

postgresql - 我的 postgresql 查询有问题

PostgreSQL:无法使带 DST 的时区正常工作

ruby-on-rails - 为什么 bundle install 不允许 pg gem 完全安装?

sql - 检测 PostgreSQL 中的孤立行

sql - 将月份数增加 1 SQL

Postgresql:日期格式和本地语言输出

java - 检测何时从 PostgreSQL 数据库中删除一行

sql - Rails 5. 范围链中的错误结果

postgresql - 计算表的列中值的出现次数 - postgresql

python - docker-compose 与 postgres 的 Django 连接