psql: FATAL: роль postgres не существует

406

Я начинающий послерод.

Я установил 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 и переустановить все?

Спасибо за помощь, ребята!

user805981
источник
1
Перезагрузка компьютера. Гарантирует, что Launchd from brew services start postresqlвыполнен.
Майкл Диммитт

Ответы:

411

ПРИМЕЧАНИЕ. Если вы установили postgres с помощью homebrew, см. Комментарий @ 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, похоже, не делает этого, вы также не должны этого делать. Простая адаптация учебника.

AH
источник
10
Для меня пользователь не создавался - вместо этого CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; я использую postgres v10.
arcseldon
232
Если вы установили Postgres, homebrewто вам нужно запустить /usr/local/opt/postgres/bin/createuser -s postgresв своем терминале
user3402754
8
Я должен был бежать/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782
1
@ user1807782 Ты спас мой день; Я думаю, что вы должны объявить это как ответ.
Толга
1
Если вы используете определенную версию postgres, то вам нужно /usr/local/opt/postgresql@11/bin/createuser -s postgres
указать
264

Ключ «Я установил postgres.app для Mac». Это приложение настраивает локальную установку PostgreSQL с суперпользователем базы данных, чья роль совпадает с вашим логином (коротким).

Когда Postgres.app запускается впервые, он создает базу данных $ USER, которая является базой данных по умолчанию для psql, если ни одна из них не указана. Пользователь по умолчанию - $ USER, без пароля.

Некоторые сценарии (например, резервная копия базы данных, созданная с pgdumpпомощью системы Linux) и учебные пособия предполагают, что суперпользователь имеет традиционное имя роли postgres.

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

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

что заставит тех ФАТАЛОВ: роль "postgres" не исчезнет.

jwd630
источник
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: не удалось подключиться к базе данных postgres: 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/install-postgres-on-mac-18f017c5d3f7

Нитин
источник
3
С помощью новейшей установки brew вы можете brew services start postgresqlзапустить postgres
Automatico
<3 <3 <3 <3 <3 <3
Адиель Ахмад
это лучший ответ
Алехандро Пабло Ткачук
39
createuser postgres --interactive

или сделать суперпользователя postgresl просто с

createuser postgres -s
SubstanceMX
источник
Я нашел этот ответ полезным, когда мой pgadmin продолжал спрашивать пользователя postgres, и у меня нет роли postgres для начала, эта команда создала его, я добавил автоматически сгенерированный pw в свой pgadmin и проблема решена!
обычно
Это работает для меня .. но так: "создать пользовательские postgres"
Роберто Родригес
31

Это происходит, когда вы работаете initdbс пользователем, чей ID не равен postgres, без указания имени postgresпользователя с помощью --username=postgresили -U postgres.

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

Чтобы это исправить, просто создайте нового пользователя с именем postgresс --superuserпомощью createuserутилиты, поставляемой с Postgres. Утилита находится в binкаталоге Postgres . например

createuser --superuser postgres

Если у вас есть пользовательское имя хоста или порт, то обязательно установите соответствующие параметры .

Не забудьте удалить другую учетную запись пользователя, созданную для вас initdb.

isapir
источник
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 свое системное имя пользователя.

Вы можете увидеть полное решение здесь .

ruzenhack
источник
8

Запуск этого в командной строке должен исправить это

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

Алекс Левин
источник
1
Это единственное, что сработало для меня. Спасибо!
Херб Михан
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при попытке удалить пользователя БД? Так разве не рекомендуется использовать этот postgres.app?
user805981
Вы не можете сбросить БД, когда подключен к нему. почему вы хотите удалить его? Это здесь для вашего удобства.
Даниэль Верите
Я просто хотел посмотреть, смогу ли я. Так что это похоже на правильную базу данных по умолчанию при загрузке моего psql и postgres.app? А как насчет прав доступа? Я не могу их больше устанавливать? Я вижу, что template0 и template1 имеют права доступа
user805981
@ user805981 Postgres.appдля тестирования и разработки; это пакет PostgreSQL от Heroku, разработанный для того, чтобы пользователям Mac, разрабатывающим с Ruby on Rails, было проще тестировать с PostgreSQL вместо SQLite по умолчанию. Rails использует, как правило, для тестирования с SQLite и развертывания в PostgreSQL, что вызывает всевозможные проблемы, поэтому Heroku также попытался упростить тестирование на PostgreSQL. Postgres.appподходит для тестирования, но я бы не стал использовать его для производственных или реальных данных, но это не то, для чего он нужен.
Крейг Рингер
4

Для чего это стоит, у меня есть Ubuntu и множество установленных пакетов, и это вступило в конфликт с ним.

Для меня правильный ответ был:

sudo -i -u postgres-xc
psql
softwareplay
источник
2

Это единственный, который исправил это для меня:

createuser -s -U $USER
Бакс
источник
2
Это делает текущего пользователя суперпользователем системы, а не просто суперпользователем postgres. Я бы сказал, что это будет в целом плохая идея, поскольку она обходит обычные политики безопасности. Пользователь sudoдолжен получить временные привилегии суперпользователя.
Шон Доусон
1

В системе Ubuntu я удалил PostgreSQL и переустановил его. Все базы данных восстановлены. Это решило проблему для меня.

Совет: сделайте резервную копию баз данных, чтобы быть на более безопасной стороне.

Гаурав Нима
источник
0

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

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

psql

И продолжить учебник.

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

Краткое объяснение:

PostgreSQL не будет работать с административным доступом к операционной системе. Вместо этого он работает с обычным пользователем, и для поддержки одноранговой аутентификации (запрашивая ОС, которая пытается подключиться) он создает пользователя и базу данных с пользователем, который запускает процесс инициализации. В этом случае это был ваш обычный пользователь.

Крис Траверс
источник
очищает несколько важных различий в postgres. Спасибо.
imsrgadich
0

Я застрял в этом вопросе, выполнив brew services stop postgresqlнакануне.
На следующий день: brew services start postgresqlне будет работать. Это потому, что, как показано при установке с помощью homebrew. Postgresql использует launchd ..., который загружается, когда ваш компьютер включен.

разрешение:
brew services start postgresql
перезагрузите компьютер.

Майкл Диммитт
источник
0

Команда \dureturn:

Название роли = postgres@implicit_files

И эта команда postgres=# \password postgresвозвращает ошибку:

ОШИБКА: роли "postgres" не существует.

Но это postgres=# \password postgres@implicit_filesработает нормально.

Также после sudo -u postgres createuser -s postgresпервого варианта также работают.

Майкл
источник