PSQL: FATAL: база данных «<пользователь>» не существует

409

Я использую приложение PostgreSql для mac (http://postgresapp.com/). Я использовал его в прошлом на других машинах, но это создавало мне проблемы при установке на моем macbook. Я установил приложение, и я побежал:

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 запускается сначала, он создает базу данных USER, которая является базой данных по умолчанию для psql, когда ни один не указан. пользователь по умолчанию - USER, без пароля.

Таким образом, казалось бы, приложение не создает $USER, но я установил- > uninstalled-reinstalled несколько раз, так что это должно быть что-то с моей машиной.

Я нашел ответ, но я точно не знаю, как он работает как пользователь, который ответил на этот поток → Получение Postgresql Running In Mac: Database "postgres" не существует не последовало. Я использовал следующую команду, чтобы открыть psql:

psql -d template1

Я оставлю этого без ответа, пока кто-нибудь не сможет объяснить, почему это работает.

  • 1
    Что показывает psql -d postgres -U postgres -h localhost ? Без флагов это по умолчанию для пользователя CLI, и я бы сказал, что это по умолчанию для "postgres" admin db, но у меня нет mac для тестирования.
  • 0
    @bma Это дает мне psql: FATAL: роль "postgres" не существует, что первоначально привело меня сюда -> stackoverflow.com/questions/15301826/… . Я пытался использовать этот ответ, но получаю тот же результат -> psql: FATAL: база данных "user" не существует
Показать ещё 2 комментария
Теги:
psql

15 ответов

798
Лучший ответ

Похоже, что ваш менеджер пакетов не смог создать базу данных с именем $user для вас. Причина, по которой

psql -d template1

работает для вас, так это то, что template1 - это база данных, созданная самими postgres и присутствующая на всех установках. Вы, видимо, можете войти в шаблон1, поэтому у вас должны быть определенные права, назначенные вам базой данных. Попробуйте это в командной строке:

createdb

а затем посмотрите, можете ли вы снова войти в систему с помощью

psql -h localhost

Это просто создаст базу данных для вашего пользователя входа, и я думаю, это то, что вы ищете. Если createdb не удалось, у вас недостаточно прав на создание собственной базы данных, и вам придется выяснить, как исправить пакет homebrew.

  • 33
    В моем случае я написал $ createdb -h localhost чтобы устранить ошибку: could not connect to database postgres: could not connect to server . После этого я могу подключиться к консоли postgresql через psql -h localhost .
  • 0
    Я все еще получаю пароль prompt'd и не знаю, какой это, какой из них является паролем приложения postgres по умолчанию?
Показать ещё 6 комментариев
75

По умолчанию postgres пытается подключиться к базе данных с тем же именем, что и ваш пользователь. Чтобы предотвратить это поведение по умолчанию, просто укажите пользователя и базу данных:

psql -U Username DatabaseName 
  • 10
    Спасибо, знаете ли вы причину такого дизайна - почему в мире я бы хотел использовать базу данных с моим именем по умолчанию?
  • 2
    @eric Базы данных часто используются сервисами, работающими как выделенный пользователь. Поэтому я предполагаю, что стратегия использования имени пользователя в качестве имени базы данных по умолчанию, вероятно, более полезна, чем использование некоторого фиксированного имени базы данных по умолчанию (например, «postgres»).
Показать ещё 3 комментария
57

Просто запустите команду в окне командной строки. (Не внутри psql).

createdb <user>

И затем попробуйте снова запустить postgres.

  • 1
    Красивая! Это сделал это! После запуска все команды psql работают как charm! благодаря тонну!
  • 9
    createdb не имел, что createdb был также инструментом командной строки
Показать ещё 1 комментарий
33
  • Войти как пользователь по умолчанию: sudo -i -u postgres
  • Создать нового пользователя: createuser --interactive
  • При запросе имени роли введите имя пользователя linux и выберите "Да" на вопрос суперпользователя.
  • Пока вы вошли в систему как пользователь postgres, создайте базу данных: createdb <username_from_step_3>
  • Подтвердите, что ошибки (-и) исчезли, введя: psql в командной строке.
  • Вывод должен показывать psql (x.x.x) Type "help" for help.
  • 0
    Чувак, ты сэкономил мне много времени.
  • 0
    Мне нужно было сделать это в Windows. Установите новое имя пользователя pg в Linux un. Исправлена.
27

Вход с использованием базы данных 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)
4

Эта ошибка также может возникать, если для переменной среды 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.

3

Я столкнулся с такой же ошибкой, когда пытаюсь открыть postgresql на mac

psql: FATAL:  database "user" does not exist

Я нашел эту простую команду для ее решения:

метод1

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

и введите

 psql

Способ 2:

psql -d postgres
  • 2
    Метод 2 спас мне жизнь
2

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

Такое же сообщение об ошибке может возникнуть при запуске файла запроса в psql без указания базы данных. Поскольку в postgresql нет инструкции use, мы должны указать базу данных в командной строке, например:

psql -d db_name -f query_file.sql
  • 1
    и дб template1 всегда существует
1

Как показано в createdb documentation:

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

Поэтому, если определенные дистрибутивы OS/postgresql делают это по-другому, это, конечно, не стандарт по умолчанию/стандарт (только что проверено, что initdb на openSUSE 13.1 создает "postgres" базы данных, но не "<user> " ). Короче говоря, psql -d postgres, как ожидается, будет использоваться при использовании пользователя, отличного от "postgres".

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

0

Если эта проблема возникла при установке postgresql через homebrew.

Пришлось создать суперпользователя по умолчанию "postgres" с помощью:

createuser --interactive postgres ответ y для суперпользователя

createuser - интерактивный пользовательский ответ y для суперпользователя

0

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

более подробная информация приведена здесь: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

  • 0
    Я знаю, что это немного не по теме, учитывая, что его попросили только psql, но Google привел меня сюда с моей проблемой, поэтому я думаю, что стоит упомянуть здесь
-1

Если вы получаете эту ошибку при развертывании проекта Rails с Capistrano, вам может понадобиться создать базу данных на удаленном сервере.

Войдите в свой Ubuntu и запустите:

sudo -u postgres psql

Введите пароль пользователя postgres, если появится запрос. Теперь создайте свою базу данных, введя:

CREATE DATABASE dbname_production;

Имя должно быть тем, которое вы указали в shared/config/database.yml на рабочем сервере.

Выход, введя \q

-2

Во-первых, полезно создать базу данных с именем так же, как и текущее использование, чтобы предотвратить ошибку, когда вы просто хотите использовать базу данных по умолчанию и создавать новые таблицы без явного объявления имени db.

Замените "skynotify" своим именем пользователя:

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

-d явно объявляет, какую базу данных использовать в качестве стандартного для операторов SQL, которые явно не включают имя db во время этого интерактивного сеанса.

ОСНОВЫ ДЛЯ ПОЛУЧЕНИЯ ЧИСТОГО ИЗОБРАЖЕНИЯ ЧТО ВАШЕ ПОЛЬЗОВАТЕЛЯ PostgresQL SERVER.

Вы должны подключиться к существующей базе данных для использования 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 в этом примере.

ПРИМЕЧАНИЕ. ДБ, созданный без определенного владельца, будет принадлежать текущему пользователю.

-2

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

-4

В нем простейшее объяснение; это проблема noob. Просто введите

pgres

приведет к этому отклику.

pgres <db_name> 

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

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

  • 0
    Я не могу понять, кто дал ему отрицательный F / B? По крайней мере, укажите, что не так с ответом.
  • 5
    На самом деле не нравится "тип вопроса noob язык"
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню