Createuser: не вдалося підключитися до postgres бази даних: FATAL: роль “tom” не існує


92

Я намагаюся встановити Postgres вперше, і мені потрібно створити користувача з дозволами на читання та створення баз даних. Однак, коли я використовую:

createuser username

у своєму терміналі я отримую таке повідомлення:

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

Том - це мій обліковий запис користувача Ubuntu, у який я зараз увійшов. Я намагаюся створити ім'я користувача "postgres", а потім зробити це, psql -U psql template1щоб я міг створити базу даних і призначити їй власника для моєї програми Rails.


Ви справді намагаєтеся створити користувача 'postgres'? Або просто користувач вашого додатку Rails? Зазвичай користувач 'postgres' уже існує, і проблема полягає лише в підключенні до нього, щоб зробити те, що вам потрібно.
ostergaard

Відповіді:


132

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

Якщо так, то postgresобліковий запис користувача PostgreSQL вже існує і налаштований на доступ через peerаутентифікацію для сокетів unix в pg_hba.conf. Ви потрапляєте до нього, запускаючи команди як користувач postgresunix, наприклад:

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

Це все в документації Ubuntu PostgreSQL, яка є першим хітом Google для "Ubuntu PostgreSQL" і висвітлена в численних запитаннях щодо переповнення стека.

(Ви значно ускладнили відповідь на це запитання, опустивши такі деталі, як ОС та версія, в якій ви працюєте, як встановили PostgreSQL тощо).


добре після створення owning_user, як зв’язатись із цим користувачем? Я маю на увазі підключити типового користувача, якого я використовую, sudo -u postgres psql postgres. так само, як підключити owning_user?
Джоні

2
Три варіанти. (a) Встановити пароль для цього користувача та відредагувати, pg_hba.confщоб використовувати md5аутентифікацію для цього користувача (див. посібник); (b) Створіть користувача ОС з тим самим іменем і продовжуйте використовувати peerauth; або (c) більш досконалий, створіть pg_ident.confвідображення, щоб дозволити користувачеві ОС ввійти як новий користувач.
Крейг Рінгер,

66

Дивіться git gist з інструкціями тут

Запустіть це:

 sudo -u postgres psql

АБО

psql -U postgres

у своєму терміналі, щоб потрапити в postgres

Примітка. Якщо ви працюєте на Mac і обидві команди вище не вдалося, перейдіть до розділу про Mac нижче

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):

Нещодавно я зіткнувся з подібною помилкою на своєму Mac:

psql: FATAL: role "postgres" does not exist

Це було тому, що моя установка була налаштована з суперкористувачем бази даних, ім’я ролі якого збігається з вашим логіном (коротким) ім’ям.

Але деякі сценарії Linux припускають, що суперкористувач має традиційну назву ролі postgres

Як я це вирішив?

Якщо ви встановили homebrewзапуск:

/usr/local/opt/postgres/bin/createuser -s postgres

Якщо ви використовуєте конкретну версію postgres, скажіть, 10.5тоді запустіть:

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

АБО:

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

АБО:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Якщо ви встановили postgres.appдля Mac запуск:

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

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


Це працювало, щоб потрапити в postgres:psql -U postgres
leontalbot

29
sudo -u postgres createuser -s tom 

це має допомогти вам, оскільки це станеться, якщо адміністратор не створив для вас обліковий запис користувача PostgreSQL. Також може бути, що вам було присвоєно ім'я користувача PostgreSQL, яке відрізняється від імені користувача вашої операційної системи, і в цьому випадку вам потрібно використовувати перемикач -U.


7

1- Увійти як користувач PostgreSQL за замовчуванням (postgres)

sudo -u postgres -i

2- Як користувач postgres. Додайте нового користувача бази даних за допомогою createuserкоманди

[postgres]$ createuser --interactive

3-вихід

[postgres]$ exit

5

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

Я скопіював причину для вас (і гіперпосилання на URL-адреси) з цієї статті:

Це трапиться, якщо адміністратор не створив для вас обліковий запис користувача PostgreSQL. (Облікові записи користувачів PostgreSQL відрізняються від облікових записів користувачів операційної системи.) Якщо ви адміністратор, див. Розділ 20 щодо довідки щодо створення облікових записів. Вам потрібно буде стати користувачем операційної системи, під якою було встановлено PostgreSQL (як правило, postgres), щоб створити перший обліковий запис користувача. Також може бути, що вам було призначено ім’я користувача PostgreSQL, яке відрізняється від імені користувача вашої операційної системи; у цьому випадку вам потрібно використовувати перемикач -U або встановити змінну середовища PGUSER, щоб вказати ваше ім'я користувача PostgreSQL

Для своїх цілей ви можете зробити:

1) Створіть обліковий запис користувача PostgreSQL:

sudo -u postgres createuser tom -d -P

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

2) Тепер ви повинні мати можливість виконувати createdbта інші команди PostgreSQL.


1

У мене була та сама проблема, я просто роблю це

sudo su - postgres

createuser odoo -U postgres -dRSP #P для пароля ( odoo або ім'я користувача , для якого потрібно надати доступ postgres)



0

Якщо ви не хочете змінювати метод автентифікації (ident) і возитися з pg_hba.conf, використовуйте це:

Перший логін як користувач за замовчуванням

 sudo su - posgres

потім увійдіть до psql і створіть користувача з тим самим іменем, що і той, у кого ви входите

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

Ви можете підтвердити свого користувача за допомогою відповідних ролей за допомогою

postgres=#  \du

Після цього ви можете створити свою базу даних і перевірити її за допомогою

psql -d dbName
\l
\q

-4

Спочатку потрібно запустити initdb. Це створить кластер бази даних та початкове налаштування

Див. Як налаштувати postgresql вперше? та http://www.postgresql.org/docs/8.4/static/app-initdb.html


5
Це абсолютно неправильно. Якби користувач не працював, у initdbних не було б сервера баз даних, який би працював і приймав підключення, щоб створити повідомлення про помилку. Видаліть цю оманливу відповідь. (BTW, надалі, будь-ласка, посилайтеся на / docs / current / static / щоб уникнути накопичення застарілих посилань)
Крейг Рінгер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.