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

Я новичок postgres.

я установил postgres.приложение для 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 и переустановить все?

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

14 ответов


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

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


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

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

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

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

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

который сделает те FATAL: роль "postgres" не существует уйти.


для 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.

по умолчанию user postgres не будет иметь никакого пароля.

проверять этот сайт на несколько статей, как это: https://sites.google.com/site/nitinpasumarthy/blog/installingpostgresonmac


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

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

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


createuser postgres --interactive

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

createuser postgres -s

первый вам нужно создать пользователя:

sudo -u postgres createuser --superuser $USER

после создать базу данных:

sudo -u postgres createdb $USER

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

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


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

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


мне нужно удалить $PGUSER:

$ unset PGUSER
$ createuser -s postgres

падение postgres база данных не имеет значения. Эта база данных изначально пуста, и ее назначение просто для postgres пользователь должен иметь своего рода" дом " для подключения, если он нужен.

тем не менее вы можете воссоздать его с помощью команды SQL CREATE DATABASE postgres;

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

поэтому вместо этой команды:sudo -u postgres psql -U postgres, это было бы больше в духе postgres.приложение просто вопрос: psql, который автоматически подключается к базе данных, соответствующей имени ваших пользователей, и с учетной записью БД с тем же именем, которая является суперпользователем, поэтому она может делать все разрешения.


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

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

sudo -i -u postgres-xc
psql

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

createuser -s -U $USER

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

можно просто:

psql

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

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

краткое описание:

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


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


на \du команда return:

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

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

ошибка: роль "postgres" не существует.

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

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