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:
- Установить Homebrew
brew install postgres
initdb /usr/local/var/postgres
-
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
или/usr/local/opt/postgres/bin/createuser -s postgres
, который будет просто использовать последнюю версию. - запустить сервер 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>
падение 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
Я не думаю, что 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
первый вариант тоже работает.