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

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

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

psql -d template1

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

Ответ 1

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

psql -d template1

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

createdb

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

psql -h localhost

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

Ответ 2

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

createdb <user>

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

Ответ 3

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

psql -U Username DatabaseName 

Ответ 4

  • Войти как пользователь по умолчанию: sudo -i -u postgres
  • Создать нового пользователя: createuser --interactive
  • При запросе имени роли введите имя пользователя linux и выберите "Да" на вопрос суперпользователя.
  • Пока вы вошли в систему как пользователь postgres, создайте базу данных: createdb <username_from_step_3>
  • Подтвердите, что ошибки (-и) исчезли, введя: psql в командной строке.
  • Вывод должен показывать psql (x.x.x) Type "help" for help.

Ответ 5

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

Ответ 6

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

psql: FATAL:  database "user" does not exist

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

метод1

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

и введите

 psql

Способ 2:

psql -d postgres

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

psql -d db_name -f query_file.sql

Ответ 10

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

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

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

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

Ответ 11

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

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

Ответ 12

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

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

Ответ 13

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

В итоге моя ошибка была:

FATAL: аутентификация по паролю не удалась

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

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

dropdb()
createdb()

ПРИМЕЧАНИЕ: это приведет к удалению БД, но мне это не нужно, и по какой-то причине я больше не могу получить доступ к pqsl, поэтому я удалил и воссоздал его. Затем psql снова работал.

Ответ 14

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

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

create database username;

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

Ответ 15

Попробуйте using-

psql -d postgres

Я также столкнулся с той же проблемой, когда бежал psql

Ответ 16

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

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

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

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

Ответ 17

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

Ответ 18

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

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

sudo -u postgres psql

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

CREATE DATABASE dbname_production;

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

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

Ответ 19

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

pgres

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

pgres <db_name> 

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

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