Сначала я запустил:
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;