Createuser: не удалось подключиться к базе данных postgres: FATAL: роль "tom" не существует

Я пытаюсь настроить Postgres в первый раз, и мне нужно создать пользователя с правами на чтение и создание баз данных. Однако, когда я использую "имя пользователя createuser" в моем терминале, я получаю следующее сообщение:

createuser: не удалось подключиться к базе данных postgres: FATAL: роль "tom" не существует

Tom - моя учетная запись пользователя Ubuntu, в которую я вошел прямо сейчас. Я пытаюсь создать имя пользователя "postgres", а затем выполнить "psql -U psql template1", чтобы я мог создать базу данных и назначить ей владельца для моего приложения на Rails.

Любая помощь?

10 ответов

Вы упомянули Ubuntu, поэтому я предполагаю, что вы установили пакеты PostgreSQL из Ubuntu через apt.

Если так, то postgres Учетная запись пользователя PostgreSQL уже существует и настроена для доступа через peer аутентификация для сокетов Unix в pg_hba.conf, Вы добираетесь до этого, выполняя команды как postgres пользователь unix, например:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Это все в документации по Ubuntu PostgreSQL, которая является первым хитом Google для "Ubuntu PostgreSQL" и освещена в многочисленных вопросах переполнения стека.

(Вы затруднили ответ на этот вопрос, опуская детали, такие как ОС и версия, на которой вы работаете, как вы установили PostgreSQL и т. Д.)

Смотрите git gist с инструкциями здесь

Запустите это:

 sudo -u postgres psql

ИЛИ ЖЕ

psql -U postgres

в свой терминал, чтобы попасть в postgres

postgres=#

Бежать

CREATE USER new_username;

Примечание: замените new_username на пользователя, которого вы хотите создать, в вашем случае это будет Tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Поскольку вы хотите, чтобы этот пользователь мог создавать БД, вам нужно изменить роль на суперпользователя

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Чтобы подтвердить, все было успешно,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Обновление / Модификация:

Недавно я столкнулся с похожей ошибкой на моем Mac:

psql: FATAL: role "postgres" does not exist

Это произошло потому, что моя установка была настроена с суперпользователем базы данных, чья роль совпадает с вашим логином (коротким).

Но некоторые сценарии Linux предполагают, что суперпользователь имеет традиционное имя роли postgres

Как я решил это?

Если вы установили с homebrew бежать:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

ИЛИ ЖЕ:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

Если вы установили с postgres.app для Mac запустить:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: замените 10.5 на вашу версию PostgreSQL

sudo -u postgres createuser -s tom 

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

1- Войдите как пользователь PostgreSQL по умолчанию (postgres)

sudo -u postgres -i

2- Как пользователь postgres. Добавьте нового пользователя базы данных, используя createuser команда

[postgres]$ createuser --interactive

3-выход

[postgres]$ exit

Ваша ошибка размещена в официальной документации. Вы можете прочитать эту статью.

Я скопировал причину для вас (и гиперссылки на URL) из этой статьи:

Это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. (Учетные записи пользователей PostgreSQL отличаются от учетных записей пользователей операционной системы.) Если вы являетесь администратором, обратитесь к Главе 20 за помощью в создании учетных записей. Вам нужно стать пользователем операционной системы, под которой был установлен PostgreSQL (обычно postgres), чтобы создать первую учетную запись пользователя. Возможно также, что вам было присвоено имя пользователя PostgreSQL, отличающееся от имени пользователя вашей операционной системы; в этом случае вам нужно использовать ключ -U или установить переменную окружения PGUSER, чтобы указать свое имя пользователя в PostgreSQL

Для ваших целей вы можете сделать:

1) Создайте учетную запись пользователя PostgreSQL:

sudo -u postgres createuser tom -d -P

(-P возможность установить пароль; -d опция для разрешения создания базы данных для вашего имени пользователя "Том". Обратите внимание, что tom - это имя пользователя вашей операционной системы. Таким образом, вы можете выполнять команды PostgreSQL без sudoИнж.)

2) Теперь вы должны быть в состоянии выполнить createdb и другие команды PostgreSQL.

Если вы не хотите менять метод аутентификации (идентификатор) и путаться с pg_hba.conf, используйте это:

Сначала войдите как пользователь по умолчанию

 sudo su - posgres

затем войдите в psql и создайте пользователя с тем же именем, что и тот, в который вы вошли

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

вы можете подтвердить своего пользователя с соответствующими ролями с помощью

postgres=#  \du

После этого вы можете создать свою базу данных и проверить ее с помощью

psql -d dbName
\l
\q

Для Linux вы можете активировать SUPERUSER, чтобы иметь возможность создавать такие базы данных:

  1. Перейти к терминалу/оболочке

  2. Войдите внутрь postgres, используяsudo -u postgres -i

Теперь ваш терминал будет выглядеть как « [email protected] :~$»

  1. Войдите в терминал postgres, используяpsql

Теперь ваш терминал будет выглядеть как «postgres=#»

  1. Входитьalter user [postgres_user_name] createdb;

Теперь у пользователя будет доступ для создания db.

  1. Выйдите из psql, используя '\q'

  2. Выйдите из postgres, используяexit

Надеюсь, это поможет вам.

В Windows используйте:

C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>

добавлять --superuser или же --createdb по мере необходимости.

См. https://www.postgresql.org/docs/current/static/app-createuser.html для получения дополнительной информации.

У меня была такая же проблема, я просто делаю это

sudo su - postgres

createuser odoo -U postgres -dRSP #P для пароля (odoo или имя пользователя, которое вы хотите получить для доступа postgres)

Вам нужно сначала запустить initdb. Это создаст кластер базы данных и начальную настройку

См. Как настроить postgresql в первый раз? и http://www.postgresql.org/docs/8.4/static/app-initdb.html

Другие вопросы по тегам