psql: FATAL: база данных "" не существует

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

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

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

psql -d template1

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

17 ответов


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

psql -d template1

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

createdb

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

psql -h localhost

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


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

psql -U Username DatabaseName 

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

createdb <user>

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


  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.

войти с помощью базы данных 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)

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

psql: FATAL:  database "user" does not exist

Я нашел эту простую команду, чтобы решить ее:

метод1

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

и типа

 psql

Способ 2:

psql -d postgres

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

на OSX я увидел следующую ошибку при попытке запустить psql из Postgress.меню приложения:

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.


как createdb документация гласит:

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

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

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


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

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

psql -d db_name -f query_file.sql

была та же проблема, простая psql -d postgres сделал это (введите команду в терминале)


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

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


Я пробовал некоторые из этих решений, но они не совсем работали (хотя они были очень на правильном пути!)

В конце концов моя ошибка была:

FATAL: ошибка аутентификации пароля для пользователя

когда я запустил следующую команду:psql

Итак, я выполнил эти две команды:

dropdb()
createdb()

Примечание: этот будет удалите db, но мне это не нужно, и по какой-то причине я больше не мог доступ к pqsl, поэтому я удалил и воссоздал его. Тогда psql снова работал.


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

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

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

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

ОСНОВЫ ДЛЯ Получение четкой картины того, что ваш сервер 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 созданный без определенного владельца будет принадлежать текущему пользователю.


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

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

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

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


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


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

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

sudo -u postgres psql

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

CREATE DATABASE dbname_production;

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

выход на входе \q


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

pgres

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

pgres <db_name> 

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

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