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

295

Я начинающий новичок.

Я установил 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
    Перезагрузка компьютера. Гарантирует, что Launchd из brew services start postresql .
Теги:
macos
terminal
osx

17 ответов

302
Лучший ответ

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

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

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

Но так как ваша установка postgres.app, похоже, не делает этого, вам также не следует. Простая адаптация учебника.

  • 8
    Для меня пользователь не создавался - это работало вместо CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; Я использую Postgres v10.
  • 36
    Если вы установили Postgres из homebrew вам нужно запустить /usr/local/opt/postgres/bin/createuser -s postgres в вашем терминале
230

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

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

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

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

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

что сделает тех ФАТАЛЬНЫМИ: роль "postgres" не существует.

  • 7
    Эта команда createuser работала для меня. Спасибо!
  • 0
    Я только что сделал чистую установку Mac OS X Mavericks. Я использую Postgres.app и Navicat для графического интерфейса для просмотра баз данных. Получал роковую роль, не существовало ошибки. Ваш совет только что полностью решил проблему. Мигрень предотвращена. 2+ для вас! Благодарю.
Показать ещё 15 комментариев
162

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

  • 1
    Это отличный момент. Спасибо за вклад.
  • 3
    С самой новой установкой brew вы можете сделать brew services start postgresql для запуска postgres
Показать ещё 3 комментария
23
createuser postgres --interactive

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

createuser postgres -s
15

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

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

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

  • 0
    У меня тоже работает! Ты спас мой бекон.
  • 1
    Я получаю роль "я" не существует
11

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

sudo -u postgres createuser --superuser $USER

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

sudo -u postgres createdb $USER

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

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

10

Мне нужно было $PGUSER:

$ unset PGUSER
$ createuser -s postgres
7

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

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

  • 0
    требует: postgresapp.com
  • 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 одно и то же имя, которое является суперпользователем, поэтому он может делать все необходимые разрешения.

  • 0
    Хорошо. Но почему я получаю ошибку ERROR: cannot drop the currently open database когда я пытаюсь удалить пользовательскую ERROR: cannot drop the currently open database ? Так разве не рекомендуется использовать этот postgres.app?
  • 0
    Вы не можете сбросить БД, когда подключен к нему. почему вы хотите удалить его? Это здесь для вашего удобства.
Показать ещё 2 комментария
3

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

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

sudo -i -u postgres-xc
psql
2

Я столкнулся с этой проблемой после сборки PostgreSQL с использованием Homebrew из-за конфликта OpenSSL.

Я предлагаю следующее:

Переустановить OpenSSL

brew remove openssl
brew install openssl

Формирование символической ссылки для OpenSSL

brew link --force openssl

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

sudo -u <administrator account> createuser <standard account> -d -P

Этот метод создаст базу данных, используя <standard account> в качестве имени, а также установит для нее пароль. Флаги в конце можно удалить, если это нежелательно.

Наконец, операции postgresql, такие как createdb <dbname>, могут использоваться без предшествующих ошибок FATAL.

1

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

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

Чтобы исправить это, просто создайте нового пользователя с именем postgres с createuser утилиты createuser которая поставляется с Postgres и может быть найдена в каталоге bin. Например

createuser --superuser postgres

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

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

1

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

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

1

Это единственное, что зафиксировало это для меня:

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

Команда \du return:

Имя роли = postgres@implicit_files

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

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

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

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

0

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


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

0

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

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

psql

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню