Я начинающий новичок.
Я установил 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 и переустановить все?
Спасибо за помощь ребятам!
Обратите внимание, что в сообщении об ошибке НЕ говорится о недостающей базе данных, в нем говорится о недостающей роли. Позже в процессе входа в систему он также может наткнуться на недостающую базу данных.
Но первым шагом является проверка отсутствующей роли: каков вывод в 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, похоже, не делает этого, вам также не следует. Простая адаптация учебника.
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
Я использую Postgres v10.
homebrew
вам нужно запустить /usr/local/opt/postgres/bin/createuser -s postgres
в вашем терминале
Ключ "Я установил postgres.app для Mac". Это приложение устанавливает локальную установку PostgreSQL с суперпользователем базы данных, чье имя роли совпадает с вашим логином (коротким).
Когда Postgres.app запускается впервые, он создает базу данных $ USER, которая является базой данных по умолчанию для psql, если ни одна из них не указана. Пользователь по умолчанию - $ USER, без пароля.
Некоторые сценарии (например, резервная копия базы данных, созданная с помощью pgdump
в системе Linux) и учебные пособия предполагают, что суперпользователь имеет традиционное имя роли postgres
.
Вы можете сделать вашу локальную установку более традиционной и избежать этих проблем, выполнив один раз:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
что сделает тех ФАТАЛЬНЫМИ: роль "postgres" не существует.
createuser
работала для меня. Спасибо!
Для MAC:
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
которые будут использовать только последнюю версию.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
brew services start postgresql
для запуска postgres
createuser postgres --interactive
или сделать postgresl суперпользователя только с
createuser postgres -s
Для меня этот код работал:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
он пришел отсюда: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
Сначала вам нужно создать пользователя:
sudo -u postgres createuser --superuser $USER
После вы создаете базу данных:
sudo -u postgres createdb $USER
Измените $USER
на имя пользователя вашей системы.
Вы можете увидеть полное решение здесь.
Мне нужно было $PGUSER
:
$ unset PGUSER
$ createuser -s postgres
Запуск этого в командной строке должен исправить его
/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.app просто выпустить: psql
, который автоматически соединяется с базой данных, соответствующей вашему имени пользователя, и с учетной записью db одно и то же имя, которое является суперпользователем, поэтому он может делать все необходимые разрешения.
ERROR: cannot drop the currently open database
когда я пытаюсь удалить пользовательскую ERROR: cannot drop the currently open database
? Так разве не рекомендуется использовать этот postgres.app?
Для чего это стоит, у меня установлено ubuntu и многие пакеты, и он вступил в конфликт с ним.
Для меня правильный ответ был:
sudo -i -u postgres-xc
psql
Я столкнулся с этой проблемой после сборки 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
.
Это происходит, когда вы запускаете initdb
с пользователем, чей ID не является postgres
, и вы не указали имя пользователя, используя --username=postgres
(или -U postgres
).
Затем создается кластер базы данных с учетной записью пользователя, которую вы использовали для запуска initdb, и ему предоставляются разрешения суперпользователя.
Чтобы исправить это, просто создайте нового пользователя с именем postgres
с createuser
утилиты createuser
которая поставляется с Postgres и может быть найдена в каталоге bin
. Например
createuser --superuser postgres
Если у вас есть пользовательское имя хоста или порт, то обязательно установите соответствующие параметры.
Не забудьте удалить другую учетную запись пользователя, созданную для вас initdb.
В системе Ubuntu я удалил PostgreSQL и переустановил его. Все базы данных восстановлены. Это решило проблему для меня.
Совет: сделайте резервную копию баз данных, чтобы быть на более безопасной стороне.
Это единственное, что зафиксировало это для меня:
createuser -s -U $USER
sudo
для получения временных привилегий суперпользователя.
Команда \du
return:
Имя роли =
postgres@implicit_files
И эта команда postgres=# \password postgres
возвращает ошибку:
ОШИБКА: роли "postgres" не существует.
Но это postgres=# \password postgres@implicit_files
работает нормально.
Также после sudo -u postgres createuser -s postgres
также работает первый вариант.
Я застрял в этой проблеме, выполнив brew services stop postgresql
за день до этого.
На следующий день: brew services start postgresql
не работает. Это происходит потому, что показано, когда вы устанавливаете с помощью homebrew. postgresql использует startd... который загружается, когда ваш компьютер включен. Разрешение brew services start postgresql
Перезагрузите компьютер.
Я не думаю, что здесь требуется sudo, потому что psql -l возвращает список баз данных. Это говорит мне, что initdb запускался под пользователем текущего пользователя, а не под пользователем postgres.
Вы можете просто:
psql
И продолжайте учебник.
Я бы предложил A.H общие моменты создания пользователя postgres и db, потому что многие приложения могут ожидать, что это будет существовать.
Краткое объяснение:
PostgreSQL не будет запускаться с административным доступом к операционной системе. Вместо этого он запускается с обычным пользователем, и для поддержки одноранговой аутентификации (запрашивающей ОС, которая пытается подключиться) он создает пользователя и db с пользователем, который запускает процесс инициализации. В этом случае это был ваш обычный пользователь.
brew services start postresql
.