psql: FATAL: роль "postgres" не існує


404

Я початківець постгрес.

Я встановив postgres.app для mac. Я розігрувався з командами psql, і я випадково скинув базу даних postgres. Я не знаю, що було в ньому.

Зараз я працюю підручник: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

І я застряг sudo -u postgres psql postgres

ПОВІДОМЛЕННЯ ПРО ПОМИЛКУ: psql: FATAL: role "postgres" does not exist

$ котрий psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Це те, що виходить з друку psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Отже, які кроки я повинен зробити? Видалити все, що стосується psql, і перевстановити все?

Дякую за допомогу, хлопці!


1
Перезавантаження комп'ютера. Забезпечує виконання запуску з brew services start postresql.
Майкл Діммітт

Відповіді:


410

ПРИМІТКА. Якщо ви встановили postgres за допомогою домашньої мови, дивіться коментар від @ user3402754 нижче.

Зауважте, що повідомлення про помилку НЕ говорить про відсутню базу даних, а про відсутність ролі. Пізніше в процесі входу він також може наткнутися на відсутню базу даних.

Але перший крок - перевірка відсутньої ролі: Який вихід у psqlкоманді \du? У моїй системі Ubuntu відповідний рядок виглядає так:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Якщо немає хоча б однієї ролі superuser, то у вас є проблема :-)

Якщо він є, ви можете використовувати це для входу. І дивлячись на результат вашої \lкоманди: Дозволи userна бази даних template0та template1бази даних такі ж, як і в моїй системі Ubuntu для суперпользователя postgres. Тож я думаю, що ваша інсталяція просто використовує userяк надрукувач. Тож ви можете спробувати цю команду для входу:

sudo -u user psql user

Якщо userце дійсно суперпользователь БД, ви можете створити ще один суперпользователь БД і приватну порожню базу даних для нього:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Але оскільки налаштування postgres.app, схоже, не робить цього, ви також не повинні. Простий адаптувати підручник.


10
Для мене користувач не створювався - замість цього CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; я використовую postgres v10.
arcseldon

229
Якщо ви встановили Postgres з того homebrewчасу, вам потрібно запустити /usr/local/opt/postgres/bin/createuser -s postgresсвій термінал
user3402754

7
Мені довелося бігати/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Ти врятував мій день; Я думаю, ви повинні рекламувати це як відповідь.
Толга

1
Якщо ви використовуєте конкретну версію поштових повідомлень, тоді вам потрібно включити версію до контуру -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Цифрування

264

Ключ - "Я встановив postgres.app для mac." Ця програма налаштовує локальну установку PostgreSQL із суперпользователем баз даних, ім'я ролі якого збігається з вашим вхідним (коротким) ім'ям.

Коли Postgres.app вперше запускається, він створює базу даних US USER, яка є базою даних за замовчуванням для psql, коли жоден не вказаний. Користувач за замовчуванням - US USER, без пароля.

Деякі сценарії (наприклад, резервна копія бази даних, створена pgdumpв системі Linux) та навчальні посібники передбачають, що суперпользователь має традиційне ім'я роліpostgres .

Ви можете зробити свою локальну установку трохи традиційнішою та уникнути цих проблем одноразово:

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

що змусить цих FATAL: роль "постгресів" не існує .


119
Якщо ви використовуєте Postgres від Homebrew, тоді ви хочете /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(для версії 9.2.4, очевидно).
Роджер Ліпскомб

1
Для postgres.app 9.3 вони, схоже, переробили каталоги. Я спробував: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, але це генерувало те саме повідомлення про помилку: "createuser: не вдалося підключитися до постгресів бази даних: FATAL: роль" postgres "не існує "
Майкл Коксон,

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresправильно бігав за мною.
cjspurgeon

9
@RogerLipscombe, якщо ви запускаєте brew link postgresqlпісля встановлення, не потрібно додавати весь шлях до createuserпростого, createuser -s postgresбуде чудово працювати
AlessioX

2
createuser -s postgresпрацював на мене. Я встановив postgres з Homebrew
biniam

228

Для MAC:

  1. Встановити Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresабо /usr/local/opt/postgres/bin/createuser -s postgresяка буде просто використовувати останню версію.
  5. запустити сервер postgres вручну: pg_ctl -D /usr/local/var/postgres start

Запуск сервера при запуску

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Тепер він налаштований, увійдіть, використовуючи psql -U postgres -h localhostабо використовуючи PgAdmin для GUI.

За замовчуванням користувач postgresне матиме жодного пароля для входу.

Перегляньте на цьому веб-сайті інші статті: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
З найновішою установкою заварки ви можете brew services start postgresqlзапустити postgres
Automatico

<3 <3 <3 <3 <3 <3
Адель Ахмед

це найкраща відповідь
Алехандро Пабло Ткачук

39
createuser postgres --interactive

або зробити суперусер postgresl просто за допомогою

createuser postgres -s


Цю відповідь я вважаю корисною, коли мій pgadmin продовжував запитувати користувача postgres, і я починаю виконувати роль postgres, ця команда створила її, я додав автогенерований pw у свій pgadmin і вирішена проблема!
звичайний

Це працює для мене .. але так: "створити користувацькі postgres"
Роберто Родрігес,

31

Це трапляється, коли ви працюєте initdbз користувачем, чий ідентифікатор немає postgres, не вказуючи postgresім'я користувача з --username=postgresабо -U postgres.

Потім кластер бази даних створюється з обліковим записом користувача системи, який ви використовували для запуску initdb, і йому надаються дозволи суперпользователя.

Щоб виправити це, просто створіть нового користувача з іменем postgresцього параметра --superuserза допомогою createuserутиліти, що постачається з Postgres. Утиліту можна знайти в binкаталозі Postgres . напр

createuser --superuser postgres

Якщо у вас є власне ім’я хоста або порт, то обов'язково встановіть відповідні параметри .

Не забудьте видалити інший обліковий запис користувача, створений для вас initdb.


2
Це найбільш інформативна відповідь.
MyWrathAcademia

17

Для мене цей код спрацював:

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

він прийшов звідси: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4


Працює і для мене! Ти врятував мій бекон.
Дейв Мангер

1
Я отримую роль "мене" не існує
SuperUberDuper

Це означає, що цей новий користувач posgres не матиме пароль?
olaoluwa_98

16

Мені потрібно було зняти $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
о людино, нарешті отримав те, що було проблемою. Виявляється, ви намагаєтеся створити користувацькі postgres як користувацькі postgres
Тарас Мацик

14

Спочатку потрібно створити користувача:

sudo -u postgres createuser --superuser $USER

Після створення бази даних:

sudo -u postgres createdb $USER

Перейдіть $USER до імені користувача системи.

Повне рішення ви можете подивитися тут .


8

Запуск цього в командному рядку повинен це виправити

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>


1
Це єдине, що працювало на мене. Дякую!
Herb Meehan

4

Видалення postgresбази даних насправді не має значення. Ця база даних спочатку порожня, і її мета просто полягає у тому, щоб postgresкористувач мав своєрідний "будинок", до якого він повинен підключитися, якщо він потрібен.

Ви все ж можете відтворити його за допомогою команди SQL CREATE DATABASE postgres;

Зауважте, що підручник, згаданий у запитанні, написаний не postgres.appна увазі. На відміну від PostgreSQL для Unix в цілому, postgres.appнамагається виглядати як звичайний додаток на відміну від служби, якою керуватиме спеціальний postgresкористувач, який має інші привілеї, ніж ваш звичайний користувач. postgres.appуправляється і керується вашим власним обліковим записом.

Тож замість цієї команди: sudo -u postgres psql -U postgres було б більше в дусі postgres.app просто видавати:, psqlяка автоматично підключається до бази даних, що відповідає імені користувачів, і з тим самим іменем db, який, як видається, є надрукованим, він може робити все, що дозволяє.


Добре. Але чому я отримую помилку, ERROR: cannot drop the currently open databaseколи намагаюся видалити db користувача? Тож чи не корисна практика використовувати цей postgres.app?
user805981

Ви не можете скинути db, підключившись до нього. чому ви хочете все-таки видалити його? Тут для вашої зручності.
Даніель Веріте

Я просто хотів подивитися, чи зможу я. Отже, це як база даних за замовчуванням правильна, коли я завантажую свій psql та postgres.app? А як щодо прав доступу? Я більше не в змозі їх встановити? Я бачу, що template0 і template1 має права доступу
user805981

@ user805981 Postgres.appпризначений для тестування та розробки; це пакет PostgreSQL від Heroku, який розроблений для полегшення тестування з PostgreSQL замість SQLite за замовчуванням для користувачів Mac, які розробляють програму Ruby on Rails. Rails використовує тенденцію тестувати SQLite та розгортати до PostgreSQL, що спричиняло всілякі проблеми, тому Heroku намагався полегшити тестування і на PostgreSQL. Postgres.appчудово підходить для тестування, але я б не вважав за краще використовувати його для виробництва або реальних даних, це просто не для чого.
Крейг Рінгер

4

Для чого це варто, у мене встановлено ubuntu та багато пакунків, і це було в конфлікті з ним.

Для мене правильною відповіддю було:

sudo -i -u postgres-xc
psql

2

Це єдине, що мене виправило:

createuser -s -U $USER

2
Це робить поточного користувача системним суперрусером, а не просто супергерой постгресів. Я б сказав, що це взагалі погана ідея, оскільки вона обходить звичайну політику безпеки. Ви повинні користувачеві sudoотримати тимчасові привілеї суперпользователя.
Шон Доусон

1

У системі Ubuntu я очистив PostgreSQL і знову встановив його. Усі бази даних відновлюються. Це вирішило для мене проблему.

Порада - Візьміть резервну копію баз даних, щоб бути на безпечнішій стороні.


0

Я не думаю, що тут потрібен sudo, оскільки psql -l повертає список баз даних. Це говорить мені, що initdb запускався під поточним користувачем користувача, а не під користувачем postgres.

Ви можете просто:

psql

І продовжуйте навчальний посібник.

Я б запропонував загальні моменти AH щодо створення користувача postgres та db, оскільки багато програм можуть очікувати, що це буде існувати.

Коротке пояснення:

PostgreSQL не працюватиме з адміністративним доступом до операційної системи. Натомість він працює із звичайним користувачем, а для підтримки аутентифікації однорангових запитань (запитуючи ОС, хто намагається підключитися), він створює користувача та db з користувачем, який запускає процес ініціалізації. У цьому випадку це був ваш звичайний користувач.


очищує кілька важливих відмінностей у постгресах. Дякую.
imsrgadich

0

Я зациклювався на цьому питанні, виконавши brew services stop postgresqlдень раніше.
Наступний день: brew services start postgresqlне працювало б. Це тому, що, як показано при установці за допомогою домашньої мови. postgresql використовує запуск ..., який завантажується при включенні комп'ютера.

дозвіл:
brew services start postgresql
перезавантажте комп'ютер.


0

\duКоманда повернення:

Назва ролі = postgres@implicit_files

І ця postgres=# \password postgresпомилка повернення команди :

ПОМИЛКА: роль "постгресів" не існує.

Але це postgres=# \password postgres@implicit_filesнормально.

Також після sudo -u postgres createuser -s postgresпершого варіанту також працюють.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.