#Что означает ошибка
permission denied for table
Роли не хватает прав. Выдайте GRANT на таблицы и схему; в PostgreSQL 15 у роли по умолчанию нет CREATE на схему public.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет GRANT | Роль не имеет разрешения на таблицу. | Выдайте нужный SELECT/INSERT точечным GRANT. |
| PostgreSQL 15 | У объектов в PostgreSQL 15 другие права по умолчанию. | Проверьте владельца схемы и фактические ACL. |
| Другой владелец | Объект принадлежит другой роли. | Настройте разрешения у владельца, ALTER OWNER не используйте без нужды. |
| Нет USAGE | Роль не имеет USAGE на схему. | Выдайте USAGE только необходимой роли. |
#Пошаговое решение
- Определите текущую роль и объектВ psql, подключённом к требуемой базе, выполните
SELECT current_user, current_database();. Затем\dn+для схем и\dp public.ИМЯ_ТАБЛИЦЫдля прав таблицы, подставив её настоящее имя. Ошибкаpermission denied for schema publicотличается от отсутствия SELECT/INSERT на таблице. - Проверьте права схемыЧтобы обратиться к объекту внутри схемы, роли обычно нужно USAGE на схему. Администратор-владелец может дать
GRANT USAGE ON SCHEMA public TO app_user;с точным именем роли;CREATEна схему нужно только при создании объектов и не следует давать всем пользователям. - Добавьте только необходимое действие над таблицейДля чтения конкретной таблицы владелец может выполнить
GRANT SELECT ON TABLE public.orders TO app_user;— замените таблицу и роль реальными. Для записи отдельно выдайте нужные INSERT/UPDATE/DELETE, а последовательности проверяйте отдельно. Не назначайте SUPERUSER илиGRANT ALL ON DATABASEкак замену точным разрешениям. - Проверьте запрос под учётной записью приложенияПодключитесь как
app_userк правильной базе и повторите один безопасный SELECT. Если ошибка возникает лишь на новых таблицах, администратор должен проверить владельца иALTER DEFAULT PRIVILEGESдля роли, создающей эти объекты, а не просто повторять GRANT без анализа.
#Если проблема осталась
Если «PostgreSQL: permission denied for table / schema public» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.