PostgreSQL: permission denied for schema public
Пользователю базы не хватает права создавать таблицы в схеме public. С PostgreSQL 15 это право есть только у владельца базы, а в Ubuntu 24.04 ставится PostgreSQL 16. Сделайте пользователя сайта владельцем базы.
Содержание 10
Как выглядит ошибка
ERROR: permission denied for schema publicОшибка появляется, когда пользователь создаёт таблицу: командой CREATE TABLE, при установке сайта или при первом запуске программы. Схема public — раздел базы, куда попадают таблицы, если раздел не указан.
Почему так
До PostgreSQL 15 создавать таблицы в схеме public могли все пользователи. С версии 15 это право отнято: схема public принадлежит владельцу базы, и создавать в ней таблицы может только он. Если базу создали командой CREATE DATABASE shop; от имени postgres, владелец базы — postgres, и пользователь сайта таблицы создать не может.
Не помогает и GRANT ALL ON DATABASE shop TO ivan;: права на базу — это подключение, временные таблицы и создание новых схем, а не таблицы в схеме public.
Как исправить: сделайте пользователя владельцем базы
Команды вводятся на сервере с базой: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Войдите в базу администратором:
sudo -u postgres psqlКоманда открывает psql — программу для работы с базой — от имени администратора базы postgres. Если система спросит пароль, введите пароль своего пользователя на сервере, а не пароль базы. Символы при вводе не видны — наберите пароль и нажмите Enter. Строка ввода сменится на postgres=#: теперь можно вводить команды для базы. Каждая команда SQL заканчивается точкой с запятой. Выйти — \q. Вместо shop подставьте имя базы, вместо ivan — пользователя сайта:
ALTER DATABASE shop OWNER TO ivan;Схема public принадлежит владельцу базы, поэтому новый владелец сразу получает право создавать в ней таблицы. Выйдите командой \q и повторите действие, на котором была ошибка.
Если базу ещё не создавали, сразу указывайте владельца: CREATE DATABASE shop OWNER ivan; — пользователь и база для сайта.
Если владельца менять нельзя
Если владельцем базы должен остаться другой пользователь, дайте пользователю сайта право создавать таблицы только в схеме public. Сначала подключитесь к нужной базе командой \c — права в схеме выдаются внутри базы:
\c shop
GRANT CREATE ON SCHEMA public TO ivan;Если ошибка permission denied for table
ERROR: permission denied for table ordersТаблицу создал другой пользователь, например postgres, а пользователю сайта прав на неё не дали. Проще всего сделать пользователя сайта владельцем таблицы — из sudo -u postgres psql, после \c shop:
ALTER TABLE orders OWNER TO ivan;Если таблиц много, можно дать права сразу на все таблицы схемы:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ivan;Команда даёт права на таблицы, которые уже есть. Чтобы права получали и таблицы, которые postgres создаст потом, выполните ещё:
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO ivan;Если ошибка permission denied for sequence
ERROR: permission denied for sequence orders_id_seqПоследовательность — счётчик, который выдаёт номера, например для столбца id. Ошибка появляется при добавлении строк, если на счётчик таблицы нет прав. Дайте их в той же базе:
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO ivan;Если ошибка must be owner of table
ERROR: must be owner of table ordersИзменить или удалить таблицу может только её владелец, и это право нельзя выдать отдельно. Передайте таблицу пользователю сайта — из sudo -u postgres psql, после \c shop:
ALTER TABLE orders OWNER TO ivan;Ошибки рядом
| Что видите | Что делать |
|---|---|
FATAL: database "shop" does not exist | такой базы нет |
FATAL: role "ivan" does not exist | такого пользователя в базе нет |
FATAL: password authentication failed for user | не подошёл пароль |
Источники
- PostgreSQL 15: Release Notes — с версии 15 у всех пользователей отнято право CREATE в схеме public.
- PostgreSQL 16: Schemas — схема public принадлежит pg_database_owner, то есть владельцу базы.
- PostgreSQL 16: Privileges — какие права даются всем по умолчанию: на базу — CONNECT, на таблицы и последовательности — никаких.
- PostgreSQL 16: ALTER DATABASE — смена владельца базы: OWNER TO.
- PostgreSQL 16: ALTER TABLE — смена владельца таблицы: OWNER TO.
- PostgreSQL 16: GRANT — права на базу, схему, таблицы и последовательности.
- PostgreSQL 16: ALTER DEFAULT PRIVILEGES — права для объектов, которые будут созданы потом; на уже созданные не действует.
- PostgreSQL 16: Role Attributes — суперпользователь обходит все проверки прав, кроме права входа.
- Исходный код PostgreSQL 16: aclchk.c — тексты permission denied for schema, table и sequence, must be owner of table.
- PostgreSQL 16: psql — команды \du, \l, \c и \password.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PostgreSQLвсе разборы ошибок базы.
- Как установить PostgreSQL на Ubuntuпользователь и база для сайта с правильным владельцем.
- Сервер для базы данныхкогда базе нужен отдельный VPS.