psql: FATAL: база даних «<користувач>» не існує


721

Я використовую додаток PostgreSql для mac ( http://postgresapp.com/ ). Раніше я його використовував на інших машинах, але це створює певні проблеми при установці на мою книгу. Я встановив додаток і запустив:

psql -h localhost

Він повертає:

psql: FATAL:  database "<user>" does not exist

Здається, я навіть не можу запустити консоль, щоб створити базу даних, яку вона намагається знайти. Те саме відбувається, коли я просто бігаю:

psql 

або якщо я запускаю psql зі спадного меню програми:

Статистика машини:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Будь-яка допомога вдячна.

Я також спробував встановити PostgreSql через homebrew, і я отримав ту саму проблему. Я також прочитав сторінку документації щодо додатків, де зазначено:

Коли Postgres.app вперше запускається, він створює базу даних US USER, яка є базою даних за замовчуванням для psql, коли жоден не вказаний. Користувач за замовчуванням - US USER, без пароля.

Тому, здавалося б, додаток не створює $ USER, однак я кілька разів встановив-> видалив-перевстановив, тож він повинен бути чимось із моєю машиною.

Я знайшов відповідь, але не впевнений, як саме вона працює, тому що користувач, який відповів на цю тему -> Отримання Postgresql запуск у Mac: База даних "postgres" не існує , не слідкував за цим. Я використовував таку команду, щоб отримати psql для відкриття:

psql -d template1

Залишаю це без відповіді, поки хтось не зможе надати пояснення, чому це працює.


3
Що psql -d postgres -U postgres -h localhostпоказує? Без прапорців він за замовчуванням користувач CLI, і я б сказав, що він за замовчуванням призначений для "postgres" адміністратора db, але у мене немає Mac для тестування.
bma

@bma Це дає мені psql: FATAL: роль "postgres" не існує, яка спочатку привела мене сюди -> stackoverflow.com/questions/15301826/… . Я намагався використовувати цю відповідь, але отримую той самий результат -> psql: FATAL: база даних "користувач" не існує
Ryan Rich

Ви заглянули в журнал db? Цікаво, чи не було б там детальніше.
bma

12
У мене була така ж проблема. Просто createdb <user>працював для мене.
poshaughnessy

запустити команду як psql -U user -d postgres, це гарантує, що користувач підключений до бази даних postgres, яка вже є. Тому нам потрібно передавати базу даних також під час входу.
Аніл

Відповіді:


1172

Здається, що менеджер пакунків не зміг створити для вас базу даних з назвою $ user. Причина, що

psql -d template1

для вас працює те, що template1 - це база даних, створена самими postgres, і присутня у всіх установках. Ви, мабуть, можете увійти в template1, тому у вас повинні бути певні права, призначені вам базою даних. Спробуйте це за допомогою оболонки:

createdb

а потім подивіться, чи можете ви знову ввійти за допомогою

psql -h localhost

Це просто створить базу даних для вашого користувача, що входить, що, на мою думку, саме ви шукаєте. Якщо createb не вдається, то у вас не буде достатньо прав для створення власної бази даних, і вам доведеться розібратися, як виправити пакет з домашньою мовою.


38
У моєму випадку я писав, $ createdb -h localhostщоб вирішити помилку could not connect to database postgres: could not connect to server. Після цього я можу підключитися до консолі postgresql через psql -h localhost.
ExiRe

Я все ще отримую підказку про пароль і не маю уявлення, який це, який - пароль програми postgres за замовчуванням?
LasagnaAndroid

2
Дякую @Kirk. Чи нам насправді потрібна -d template1ваша перша команда? Я бачив "template1" у навчальних посібниках по всьому Інтернету, але він служить лише для того, щоб мене бентежити. Більш логічним підходом буде, на мій погляд, 1) Створення користувача PostgreSQL, наприклад, "usera" 2) Створення бази даних з тим же ім'ям, що і користувач "usera" (я думаю, що це шалено, але, здається, PostgreSQL цього вимагає) 3) Увійдіть у PostgreSQL як суперкористувач "postgres" і призначте привілеї бази "usera" користувачеві "usera" (о, боже, це справді життя?)
ericn

@eric: Шаблон -d1 є лише для того, щоб перевірити, чи може ОП взагалі увійти. Оскільки він створений в час initdb, він завжди існує, і це була проста перевірка. З цього моменту ваша процедура, як правило, "реальне життя".
Кірк Ройбал

@ExiRe Ви щойно вилікували сильний головний біль, який у мене був за допомогою однієї простої команди. Дякую!
Дейв Мангер

193

З терміналу просто запустіть команду у вікні командного рядка. (Не всередині psql) .

createdb <user>

А потім спробуйте запустити postgres ще раз.


3
Гарний! Це зробили! Після цього всі команди psql працюють як шарм! спасибі тонну!
природознавець

1
І я намагався в шаблоні psql. damn
користувач1735921

2
також ви можете просто бігтиcreatedb
Mantisimo

порада для таких користувачів, як я;) (не всередині psql). означає, що коли ви просто відкриєте вікно терміналу, просто введіть цю створенуb як першу команду, а потім спробуйте увійти в psql.
Рохан Додея

Чудово! Працював для мене на OSX.
darkhipo

150

За замовчуванням postgres намагається підключитися до бази даних з тим самим іменем, що і ваш користувач. Щоб запобігти цій поведінці за замовчуванням, просто вкажіть користувача та базу даних:

psql -U Username DatabaseName 

14
Дякую, чи знаєте ви причину такого дизайну - чому в світі я б хотів за замовчуванням перейти до бази даних моїх імен?
ericn

3
@eric Бази даних часто використовуються службами, що працюють як виділений користувач. Тому я здогадуюсь, що стратегія використання імені користувача як імені бази даних за замовчуванням, ймовірно, корисніше, ніж використання якогось фіксованого імені бази даних за замовчуванням (наприклад, "postgres").
user686249

5
як запустити сценарій SQL, який фактично створює базу даних? у моєму випадку він завжди намагається підключитися до бази даних <user>, коли моя мета - створити інший БД: psql -U Username -f create_db.sqlце поверне помилку:database Username doesn't exists
Костанос

Фантастична відповідь дякую, але напрошується питання, чому це не в довідці командного рядка? psql --help
Шон Вейдер

1
psql -U Username postgresколи у вас ще немає баз даних
Анатолій Степанюк

59
  1. Вхід як користувач за замовчуванням: sudo -i -u postgres
  2. Створити нового користувача: createuser --interactive
  3. Коли з'явиться запит на ім’я ролі, введіть ім’я користувача linux та виберіть Так для питання суперпользователя.
  4. Як і раніше увійшли як користувач postgres, створіть базу даних: createdb <username_from_step_3>
  5. Підтвердження помилок відсутнє, ввівши: psqlу командному рядку.
  6. Результат повинен показувати psql (x.x.x) Type "help" for help.

Людина, ти врятував мені багато часу.
Jp Reddy

Мені потрібно було це зробити в Windows. Встановіть нове ім’я pg для Linux un. Виправлено.
RichieRich

Це працювало для мене як шарм
Обіцяй Престон

41

Увійти за допомогою бази даних template1 за замовчуванням:

#psql -d template1
#template1=# \l

  List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(3 rows)

Створіть базу даних за допомогою свого userId:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

Закрийте і знову увійдіть

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.

gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)

20

Я зіткнувся з тією ж помилкою, коли намагався відкрити postgresql на mac

psql: FATAL:  database "user" does not exist

Я знайшов цю просту команду, щоб її вирішити:

метод1

$ createdb --owner=postgres --encoding=utf8 user

і тип

 psql

Спосіб 2:

psql -d postgres

5
Спосіб 2 врятував мені життя
tom10271

9

З тією ж проблемою був простий psql -d postgresце (Введіть команду в терміналі)


6

Ця помилка також може виникнути, якщо змінна середовища PGDATABASE встановлена ​​на ім'я бази даних, яка не існує.

На OSX я побачив наступну помилку під час спроби запуску psql з меню Postgress.app:

psql: FATAL: database "otherdb" does not exist

Рішення помилки полягало в тому, щоб видалити export PGDATABASE=otherdbз ~/.bash_profile:

Крім того, якщо PGUSER встановлений на щось інше, ніж ваше ім'я користувача, станеться така помилка:

psql: FATAL: role "note" does not exist

Рішення - видалити export PGUSER=notmeз ~/.bash_profile.


5

Установка постгресів після публікації, у моєму випадку версія 12.2, я виконував команду нижче createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

ура, це працювало для мене
FaISalBLiNK

4

Оскільки це питання є першим в результатах пошуку, я все одно поставлю інше рішення для іншої проблеми, щоб не мати дублюючої назви.

Таке ж повідомлення про помилку може з'явитися під час запуску файлу запиту psqlбез введення бази даних. Оскільки useу postgresql немає заяви, нам потрібно вказати базу даних у командному рядку, наприклад:

psql -d db_name -f query_file.sql

1
і db template1 завжди існує
січня

4

Як зазначено у створеній документації :

Перша база даних завжди створюється командою initdb, коли ініціалізується область зберігання даних ... Ця база даних називається postgres.

Отже, якщо певні дистрибутиви ОС / postgresql роблять це по-різному, це, звичайно, не є типовим / стандартним (просто перевірено, що initdbв openSUSE 13.1 створюється БД "postgres", але не "<користувач>"). Коротше кажучи, psql -d postgresочікується, що він буде використаний під час використання іншого користувача, ніж "postgres".

Очевидно, що прийнята відповідь, запущена createdbдля створення БД, названого як користувач, також працює, але створює зайву БД.


1

виникли проблеми з використанням драйвера JDBC, тому потрібно просто додати базу даних (можливо, надмірно залежно від інструменту, яким ви можете користуватися) після імені хоста в URL, наприклад jdbc:postgres://<host(:port)>/<db-name>

Більш детальна інформація задокументована тут: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


Я знаю, що це небагато теми, враховуючи, що просили лише psql, але Google привів мене сюди зі своєю проблемою, тому я думаю, що тут варто згадати
Андреас Дітріх,

1

Підключіться до postgres через наявний суперрузер.

Створіть базу даних за іменем користувача, до якого ви підключаєтесь до постгресів.

create database username;

Тепер спробуйте підключитися через ім'я користувача


1

Спробуйте використовувати-

psql -d postgres

Я також стикався з тим же питанням, коли бігав psql


0

По-перше, корисно створити базу даних, названу так само, як і ваше поточне використання, щоб запобігти помилці, коли ви просто хочете використовувати базу даних за замовчуванням і створювати нові таблиці, не оголошуючи ім'я db явно.

Замініть "skynotify" на ваше ім'я користувача:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d явно оголошує, яку базу даних використовувати як за замовчуванням для операторів SQL, які явно не містять імені db під час цього інтерактивного сеансу.

ОСНОВИ ДЛЯ ВІДКЛЮЧЕННЯ ЧИСЛОЇ КАРТИНИ, ЩО В ТЕМУ є ваш ПОСЕРГ PostgresQL.

Щоб користуватися psql інтерактивно, потрібно підключитися до існуючої бази даних. На щастя, ви можете запитати psql для переліку баз даних:

psql -l

.

                                          List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

Це НЕ запускає інтерактивну консоль, вона просто виводить текстову таблицю на термінал.

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

Аналогічно виберіть таблиці з бази даних:

psql -d postgres -c "\dt;"

У моїй базі даних "postgres" немає таблиць, але будь-яка база даних, яка дійсно, виведе текстову таблицю в термінал (стандартний вихід).

А для повноти ми також можемо вибрати всі рядки з таблиці:

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

.

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

Навіть якщо повернуто нульові рядки, ви отримаєте назви полів.

Якщо ваші таблиці містять більше десятка рядків, або ви не впевнені, корисніше почати з підрахунку рядків, щоб зрозуміти, скільки даних у вашій базі даних:

 psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

 count 
-------
     0
(1 row)

Не переконайтеся, що "1 рядок" вас бентежить, він просто відображає, скільки рядків повертається за запитом, але 1 рядок містить кількість, яку ви хочете, що в цьому прикладі дорівнює 0.

ПРИМІТКА: db, створений без визначеного власника, буде належати поточному користувачеві.


0

Я спробував деякі з цих рішень, але вони не дуже спрацювали (хоча вони були дуже на правильному шляху!)

Врешті-решт моя помилка:

FATAL: помилка автентифікації пароля для користувача

коли я запустив таку команду: psql

Тоді я запустив ці дві команди:

dropdb()
createdb()

Примітка: це буде видалити БД, але мені не потрібно його і за якою - то причини я більше не міг pqsl доступу, так що я видалив і відтворив його. Потім psqlзнову працювали.


0

Не впевнений, чи це вже додано у відповіді, дуже допомогла відповідь Анатолія Степанюка, яка полягає в наступному.

psql -U Username postgres # when you have no databases yet

-1

Була ця проблема під час встановлення postgresql через homebrew.

Довелося створити суперкористувача "postgres" за замовчуванням за допомогою:

createuser - інтерактивна відповідь на повідомлення для супер користувача

createuser - інтерактивна відповідь користувача y до для суперкористувача


-3

У мене все-таки виникла проблема вище після встановлення postgresql за допомогою homebrew - я вирішив її, поставивши / usr / local / bin на мій шлях до / usr / bin


-12

Це найпростіше пояснення; це noob питання. Просто набравши текст

pgres

призведе до такої відповіді.

pgres <db_name> 

буде успішно без помилок, якщо користувач має дозволи на доступ до db.

Можна вписатись у деталі експортованих змінних середовища, але це непотрібно. Це занадто просто, щоб не вдалося з будь-якої іншої причини.


5
Дійсно не подобається "мова видачі
нооб вида

Крім того, він не рекомендував вирішити питання, тому не відповів на питання.
Дебора

1
ніколи не чувpgres
Glenn Plas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.