Користувач Postgres не існує?


92

Я щойно встановив Postgres і вже протягом 1-2 годин возився з ним та різними конфігураціями.

Я застряг на тому, що не можу змінити користувача postgres

$ su - postgres дає таку помилку: su: unknown login: postgres

$ sudo -u postgres psql дає таку помилку: sudo: unknown user: postgres

Ці спроби робляться як звичайний користувач. Спроба їх як кореневих результатів має абсолютно однакові результати. Я встановив postgres через Homebrew на OS X, і я прочитав інструкції кілька разів.


Ви просто намагаєтеся запустити psql?
danielM

Ну так, я хочу працювати як належний postgresкористувач.
krystah

У деяких версіях Mac OS X, з деякими методами встановлення, я думаю, що користувач створюється як postgres_натомість. Примітка кінцевого підкреслення. Крім того, ви впевнені, що ви (або інсталятор) насправді створили екземпляр PostgreSQL та запустили базу даних?
Крейг Рінгер,

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

Відповіді:


89

psql: Входить у систему за допомогою мого імені користувача за замовчуванням

psql -U postgres: Входить до мене як користувач postgres

Здається, судо для мене не потрібне.

Я використовую Postgres.app для своєї бази даних OS X postgres. Це зняло головний біль, переконавшись, що інсталяція працює і сервер баз даних запущений належним чином. Перевірте тут: 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

Мені добре працювало у випадку з db name: postgres & username: postgres. Тож вам не потрібно писати судо.

А у випадку інших db, ви можете спробувати

psql -U yourdb postgres

Як зазначено у довідці Postgres:

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

Мій випадок: $ psql -U postgresгенерує результат psql: FATAL: role "postgres" does not exist, але psql postgresпрацює.
Заморожене полум'я

4

Я отримую точно такі ж помилки, як kryshah з 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

Щоб уникнути запиту пароля постійно, у вас є три варіанти, як описано тут .


1

Для мене це було рішення на 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.