it-swarm.com.ru

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

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

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

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

304
user805981

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

Но первым шагом является проверка отсутствующей роли: что выводится в 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, похоже, не делает этого, вы также не должны этого делать. Простая адаптация учебника.

300
A.H.

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

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

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

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

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

что заставит тех FATAL: роль postgres не существует исчезнуть.

239
jwd630

Для 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

187
Nitin
createuser postgres --interactive

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

createuser postgres -s
28
SyntheticMeshwork

Для меня этот код работал:

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

это пришло отсюда: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

15
Kevin Zhao

Сначала вам нужно создать пользователя:

Sudo -u postgres createuser --superuser $USER

После вы создаете базу данных:

Sudo -u postgres createdb $USER

Измените $USER на имя вашей системы.

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

12
ruzenhack

Мне нужно было сбросить $PGUSER:

$ unset PGUSER
$ createuser -s postgres
10
Beau Barker

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

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

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

createuser --superuser postgres

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

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

8
isapir

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

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

7
Alex Levine

Удаление базы данных 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 с тем же именем, которая оказывается суперпользователем , так что он может делать все что угодно с разрешениями.

4
Daniel Vérité

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

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

Sudo -i -u postgres-xc
psql
3
softwareplay

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

createuser -s -U $USER
1
Bax

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

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

1
Gaurav Neema

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

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

0
Michael Dimmitt

Команда \du возвращает:

Имя роли = [email protected]_files

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

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

Но этот postgres=# \password [email protected]_files работает нормально.

Также после Sudo -u postgres createuser -s postgres первый вариант также работает.

0
Michael

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

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

psql

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

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

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

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

0
Chris Travers