Назад | Перейти на главную страницу

Почему у моего пользователя Postgres нет прав на добавление базы данных Postgres?

Сначала я запустил:

sudo su postgres
createuser -U postgres foouser -P

который работал нормально, и я побежал:

createdb -U foouser -E utf8 -O foouser foodatabase -T template0

и получил "разрешение отклонено: невозможно создать базу данных"

Во-первых, стоит ли мне даже su так как postgres для выполнения операций, подобных первой (при условии, что мой каталог данных postgres принадлежит postgres), или есть -U postgres от любого пользователя (при условии trust используется в pg_hba.conf) достаточно?

Во-вторых, почему я столкнулся с этой ошибкой? Это потому, что пользователь foouser не суперпользователь? Должен ли я создать foodatabase используя postgres пользователь и просто -O foouser?

Вы получаете эту ошибку, потому что (как вы правильно догадались) foouser не является суперпользователем и не имеет CREATE DATABASE привилегия.

Вы можете создать базу данных как свой postgres суперпользователь, с foouser как собственник, что, наверное, самый разумный вариант.
В качестве альтернативы вы можете сделать foouser суперпользователя БД (определенно не рекомендуется) или предоставить этому пользователю CREATE DATABASE привилегия (также не рекомендуется - ваши отдельные пользователи базы данных должны быть обычными пользователями, владелец базы данных - это наивысший уровень привилегий, который они должны иметь.)


Обычно я не рекомендую использовать инструменты командной строки Postgres. В них нет ничего плохого, но, на мой взгляд, предпочтительнее использовать командную строку SQL для взаимодействия с вашей базой данных.
Документация по CREATE DATABASE Команда SQL это, IMHO, лучше, чем документация для эквивалента командной строки.

SQL-эквивалент того, что вы делаете в команде, будет выглядеть так:

CREATE DATABASE foodatabase WITH OWNER foouser ENCODING 'utf8' TEMPLATE template0;