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, и я получаю ту же проблему. Я также прочитал страницу документации по приложениям, которая гласит:
Для Работы С Постгресом.приложение сначала запускается, он создает базу данных пользователей ,
который является базой данных по умолчанию для psql, если она не указана. Этот
пользователь по умолчанию - $USER, без пароля.
так что, казалось бы, приложение не создает $USER однако я установил->uninstalled-переустановил несколько раз сейчас, так что это должно быть что-то с моей машиной.
Я нашел ответ, но я не уверен точно, как это работает, поскольку пользователь, который ответил на этот поток -> получение Postgresql, работающего в Mac: база данных "postgres" не существует, не последовало. Я использовал следующую команду, чтобы открыть psql:
psql -d template1
я оставлю это без ответа, пока кто-то не сможет дать объяснение, почему это работает.
17 ответов:
похоже, что ваш менеджер пакетов не смог создать базу данных с именем $user для вас. Причина в том, что
psql -d template1работает для вас является то, что template1 является базой данных, созданной самим postgres, и присутствует на всех установках. Вы, по-видимому, можете войти в template1, поэтому у вас должны быть некоторые права, назначенные вам базой данных. Попробуйте это в командной строке:
createdbа затем посмотреть, если вы можете войти в систему снова с
psql -h localhostЭто просто создайте базу данных для Вашего логина пользователя, который я думаю, что это то, что вы ищете. Если createdb терпит неудачу, то у вас недостаточно прав для создания собственной базы данных, и вам придется выяснить, как исправить пакет homebrew.
по умолчанию postgres пытается подключиться к базе данных с тем же именем, что и ваш пользователь. Чтобы предотвратить это поведение по умолчанию, просто укажите пользователя и базу данных:
psql -U Username DatabaseName
из терминала просто запустите команду в окне командной строки. (не в psql).
createdb <user>а затем попробуйте запустить postgres снова.
- войти в качестве пользователя по умолчанию:
sudo -i -u postgres- создать нового пользователя:
createuser --interactive- при запросе имени роли введите имя пользователя linux и выберите Да для вопроса суперпользователя.
- все еще зарегистрирован как пользователь postgres, создайте базу данных:
createdb <username_from_step_3>- подтвердите ошибку(ы), введя:
psqlв командной строке.- вывод должен показать
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)создайте базу данных с вашим идентификатором пользователя:
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 documentation гласит:
первая база данных всегда создается командой 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
возникла проблема с использованием драйвера 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()Примечание: этот будет удалите БД, но мне это не нужно, и по какой-то причине я больше не мог доступ к 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 в этом примере.
Примечание: дБ созданный без определенного владельца будет принадлежать текущему пользователю.
была эта проблема при установке postgresql через homebrew.
пришлось создать по умолчанию "postgres" суперпользователя с:
createuser -- interactive 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>будет успешно без ошибок, если у пользователя есть разрешения на доступ к БД.
можно перейти к деталям экспортируемых переменных среды, но это не нужно .. это слишком просто, чтобы потерпеть неудачу по любой другой причине.
Comments