Пользователь Postgres не существует?


92

Я только что установил Postgres и возился с ним и различными конфигурациями в течение 1-2 часов.

Я застрял в том, что не могу перейти на пользователя postgres

$ su - postgres дает следующую ошибку: su: unknown login: postgres

$ sudo -u postgres psql дает следующую ошибку: sudo: unknown user: postgres

Эти попытки делаются как обычный пользователь. Попытка их использовать как root дает точно такие же результаты. Я установил postgres через Homebrew на OS X и прочитал инструкции несколько раз.


Вы просто пытаетесь запустить psql?
danielM

Ну да, я хочу работать как настоящий postgresпользователь.
krystah

В некоторых вариантах Mac OS X при некоторых методах установки я думаю, что postgres_вместо этого пользователь создается как . Обратите внимание на подчеркивание в конце. Кроме того, вы уверены, что вы (или установщик) действительно создали экземпляр PostgreSQL и запустили базу данных?
Craig Ringer

1
Мне не удалось переключиться на postgresпользователя. Решил проблему после установки postgresql-serverпакета.
sergio 郝海东 冠状 病 六四 事件 法轮功

Ответы:


89

psql: Выполняет вход с моим именем пользователя по умолчанию

psql -U postgres: Авторизует меня как пользователя postgres

Судо мне не нужен.

Я использую Postgres.app для своей базы данных postgres в OS X. Это устранило головную боль, связанную с проверкой работоспособности установки и правильного запуска сервера базы данных. Посмотрите здесь: http://postgresapp.com

Изменить: Благодарим @Erwin Brandstetter за исправление моего использования аргументов.


8
Я установил с помощью Brew, и он не создал пользователя с именем postgres или _postgres (насколько я понимаю), поэтому это не удалось для меня. Решение @kangkyu объясняет и проводит вас через проблемы - если у вас нет пользователя postgres, тогда: psql postgresи psql -d postgres.
notapatch

21

К тому же psql --help, когда вы не установили параметры для имени базы данных (без -dпараметра), это будет ваше имя пользователя, если вы этого не сделали -U, имя пользователя базы данных также будет вашим именем пользователя и т. Д.

Но по initdbкоманде (для создания первой базы данных) у него нет вашего имени пользователя в качестве имени базы данных. У него есть база данных с именем postgres. Первая база данных всегда создается командой initdb при инициализации области хранения данных. Эта база данных называется postgres.

Поэтому, если у вас нет другой базы данных с именем вашего пользователя, вам нужно сделать, psql -d postgresчтобы команда psql работала. И вроде дает -dвариант по умолчанию, psql postgresтоже работает.

Если вы создали другую базу данных, имена которой совпадают с вашим именем пользователя (это должно быть сделано с createdb), тогда вы можете psqlтолько командовать . И, похоже, первое имя пользователя базы данных устанавливается как имя пользователя вашей машины по brew.

psql -d <first database name> -U <first database user name>

или,

psql -d postgres -U <your machine username>
psql -d postgres

будет работать по умолчанию.


17

OS X имеет тенденцию добавлять к именам системных учетных записей префикс «_»; вы не говорите, какую версию OS X вы используете, но по крайней мере в 10.8 и 10.9 пользователь _postgres существует при установке по умолчанию. Обратите внимание, что вы не сможете использовать suэту учетную запись (кроме как root), поскольку у нее нет пароля. sudo -u _postgres, с другой стороны, должно работать нормально.


Благодарность! Это тот ответ, который я искал. Могу ли я что-нибудь сделать, чтобы переименовать пользователя в «postgres»? Вход в систему от имени этого пользователя _postgres приводит к тому, что psql жалуется, что пользователь "_postgres" не существует. Я пытаюсь восстановить чистый экземпляр postgres с помощью файла резервной копии из другой базы данных
Крис Рейес - он-его

1
@ChrisReyes Изменение имени системных учетных записей может нарушить работу компонентов системы, которые их используют, поэтому я настоятельно рекомендую этого не делать. Вы можете создать другую учетную запись пользователя с именем «postgres» и использовать ее, но, если я правильно понимаю (а я, возможно, нет), вы столкнулись с тем, что учетная запись пользователя в базе данных postgres не называется _postgres. AIUI имена учетных записей в БД отделены от имен системных учетных записей, поэтому не должно быть проблем с запуском экземпляра БД под системной учетной записью "_postgres" и открытием этой БД с учетной записью базы данных "postgres".
Гордон Дэвиссон


4
psql -U postgres

Работал нормально для меня в случае имени базы данных: postgres и имени пользователя: postgres. Таким образом, вам не нужно писать sudo.

А в случае другого db вы можете попробовать

psql -U yourdb postgres

Как указано в справке Postgres:

psql [OPTION]... [DBNAME [USERNAME]]

Мой случай: $ psql -U postgresвыводит psql: FATAL: role "postgres" does not exist, но psql postgresработает.
Frozen Flame

4

Получаю точно такие же ошибки, что и крышах с su - postgresиsudo -u postgres psql . Ответ DanielM также дает ошибки.

Выходы при неправильных настройках

Однако ответьте на комментарий przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Я думаю, что часть этой проблемы может быть в настройках владельца в OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

но делать sudo chown -R postgres:staff /Users/postgresдает chown: invalid user: ‘postgres:staff’.

Короче говоря, это не решение проблемы. Используйте инструменты, предоставляемые установкой postgres, для создания пользователя и базы данных.

Чтобы получить правильные настройки и выходы

После установки postgres есть специальные команды для добавления нового пользователя в систему базы данных. После initdb запустите следующее, как описано здесь

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Чтобы не запрашивать пароль постоянно, у вас есть три варианта, как описано здесь .


2

Для меня это было решение в macOS. Переустановите psql.

brew install postgres

Запустить сервер PostgreSQL

pg_ctl -D /usr/local/var/postgres start

Инициализировать БД

initdb /usr/local/var/postgres

Если эта команда выдает ошибку, удалите старый файл базы данных и повторно запустите указанную выше команду.

rm -r /usr/local/var/postgres

Создать новую базу данных

createdb postgres_test
psql -W postegres_test

Вы войдете в эту базу данных и сможете создать здесь пользователя для входа в систему


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.