ОШИБКА: слишком большой ряд: размер 8168, максимальный размер 8164 - PullRequest
0 голосов
/ 25 апреля 2018

Я использую 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 +), где эта ошибка исправлена?

1 Ответ

0 голосов
/ 26 апреля 2018

Это связано с тем, что каждое новое разрешение расширяет столбец nspacl записи pg_namespace для этой схемы.

Теперь блоки таблиц в PostgreSQL имеют размер 8 КБ, и каждая строка таблицы должна помещаться в один блок, отсюда и ограничение.

В обычных таблицах это не будет проблемой, потому что PostgreSQL хранит негабаритные поля переменной длины & ldquo; out of line & rdquo; в так называемых TOAST таблицах. Но для системных каталогов нет таблиц TOAST, поэтому этот путь эвакуации закрыт.

Я бы сказал, что вы попали в этот предел из-за плохого дизайна. Вместо того, чтобы предоставлять каждой роли доступ к схеме по отдельности, используйте иерархию ролей, назначьте множество ролей группам и предоставьте разрешения схемы на уровне группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...