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

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

psql -d template1

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

26 ответов

Решение

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

psql -d template1

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

createdb

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

psql -h localhost

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

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

createdb <user>

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

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

psql -U Username DatabaseName 
  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)

После установки postgres, в моем случае версия 12.2, я выполнил следующую команду createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

Я столкнулся с той же ошибкой при попытке открыть postgresql на Mac

psql: FATAL:  database "user" does not exist

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

method1

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

и введите

 psql

Способ 2:

psql -d postgres

Шаг 1:

psql -d template1

теперь вы должны быть на терминале psql

Шаг 2:

CREATE DATABASE username;

необязательно: для типа терминала psql \ls перечислить все базы данных

Шаг 3:

psql -h localhost

теперь ты должен быть на связи

Попробуйте использовать-

psql -d postgres

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

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

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

Не уверен, что это уже добавлено в ответы, ответ Анатолия Степанюка был очень полезным, а именно:

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

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

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

psql -d db_name -f query_file.sql

Как указано в документации createb:

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

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

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

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

Замените "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.

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

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

дальнейшие подробности описаны здесь: http://www.postgresql.org/docs/7.4/static/jdbc-use.html

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

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

create database username;

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

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

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

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

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

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

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

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

dropdb()
createdb()

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

Это сработало для меня при решении этой проблемы

я запустил sudo -i -u postgress --> чтобы получить доступ к моей базе данных postgres.

Затем введите свой пароль.

это позволит вам теперь ввести psql, который предложит вам другую команду

Ваше здоровье!

Вы можете установить имя базы данных, к которой вы хотите подключиться, в переменной env PGDATABASE=database_name. Если вы не устанавливаете это имя базы данных psql по умолчанию как имя пользователя. после установки вам не нужно создавать b

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

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

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

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

Запустил postgres в докере. В cli я получаю сообщение об ошибке, что «корневая» роль не существует.

су - постгрес

psql

решил проблему.

У PostgreSQL есть собственный пользователь в системе, который создается при установке PostgreSQL. Пользователь postgres может войти в PostgreSQL без пароля. Ни один другой пользователь не может войти в PostgreSQL.

Это означает, что перед использованием PostgreSQL вам нужно будет переключиться на эту учетную запись пользователя с помощью команды:

su - postgres После этого вы сможете войти в клиент PosgreSQL с помощью команды:

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

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

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

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

sudo -u postgres psql

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

CREATE DATABASE dbname_production;

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

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

В простейшем объяснении; это нуб проблема. Просто печатать

pgres

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

pgres <db_name> 

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

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

Другие вопросы по тегам