Я использую приложение 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
Я оставлю этого без ответа, пока кто-нибудь не сможет объяснить, почему это работает.
Похоже, что ваш менеджер пакетов не смог создать базу данных с именем $user для вас. Причина, по которой
psql -d template1
работает для вас, так это то, что template1 - это база данных, созданная самими postgres и присутствующая на всех установках. Вы, видимо, можете войти в шаблон1, поэтому у вас должны быть определенные права, назначенные вам базой данных. Попробуйте это в командной строке:
createdb
а затем посмотрите, можете ли вы снова войти в систему с помощью
psql -h localhost
Это просто создаст базу данных для вашего пользователя входа, и я думаю, это то, что вы ищете. Если createdb не удалось, у вас недостаточно прав на создание собственной базы данных, и вам придется выяснить, как исправить пакет homebrew.
$ createdb -h localhost
чтобы устранить ошибку: could not connect to database postgres: could not connect to server
. После этого я могу подключиться к консоли postgresql через psql -h localhost
.
По умолчанию postgres пытается подключиться к базе данных с тем же именем, что и ваш пользователь. Чтобы предотвратить это поведение по умолчанию, просто укажите пользователя и базу данных:
psql -U Username DatabaseName
Просто запустите команду в окне командной строки. (Не внутри psql).
createdb <user>
И затем попробуйте снова запустить postgres.
createdb
не имел, что createdb
был также инструментом командной строки
sudo -i -u postgres
createuser --interactive
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)
Создайте базу данных с помощью 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)
Эта ошибка также может возникать, если для переменной среды 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
.
Я столкнулся с такой же ошибкой, когда пытаюсь открыть postgresql на mac
psql: FATAL: database "user" does not exist
Я нашел эту простую команду для ее решения:
метод1
$ createdb --owner=postgres --encoding=utf8 user
и введите
psql
Способ 2:
psql -d postgres
Поскольку этот вопрос является первым в результатах поиска, я все равно положу другое решение для другой проблемы, чтобы не иметь дублирующее название.
Такое же сообщение об ошибке может возникнуть при запуске файла запроса в psql
без указания базы данных. Поскольку в postgresql нет инструкции use
, мы должны указать базу данных в командной строке, например:
psql -d db_name -f query_file.sql
Как показано в createdb documentation:
Первая база данных всегда создается командой initdb, когда область хранения данных инициализируется... Эта база данных называется postgres.
Поэтому, если определенные дистрибутивы OS/postgresql делают это по-другому, это, конечно, не стандарт по умолчанию/стандарт (только что проверено, что initdb
на openSUSE 13.1 создает "postgres" базы данных, но не "<user> " ). Короче говоря, psql -d postgres
, как ожидается, будет использоваться при использовании пользователя, отличного от "postgres".
Очевидно, что принятый ответ, работающий createdb
для создания БД, подобный пользователю, также работает, но создает избыточную БД.
Если эта проблема возникла при установке postgresql через homebrew.
Пришлось создать суперпользователя по умолчанию "postgres" с помощью:
createuser --interactive postgres ответ y для суперпользователя
createuser - интерактивный пользовательский ответ y для суперпользователя
возникла проблема с использованием драйвера JDBC, поэтому нужно просто добавить базу данных (возможно, избыточно в зависимости от инструмента, который вы можете использовать) после имени хоста в URL-адресе, например.
jdbc:postgres://<host(:port)>/<db-name>
более подробная информация приведена здесь: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT
Если вы получаете эту ошибку при развертывании проекта Rails с Capistrano, вам может понадобиться создать базу данных на удаленном сервере.
Войдите в свой Ubuntu и запустите:
sudo -u postgres psql
Введите пароль пользователя postgres, если появится запрос. Теперь создайте свою базу данных, введя:
CREATE DATABASE dbname_production;
Имя должно быть тем, которое вы указали в shared/config/database.yml
на рабочем сервере.
Выход, введя \q
Во-первых, полезно создать базу данных с именем так же, как и текущее использование, чтобы предотвратить ошибку, когда вы просто хотите использовать базу данных по умолчанию и создавать новые таблицы без явного объявления имени 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 в этом примере.
ПРИМЕЧАНИЕ. ДБ, созданный без определенного владельца, будет принадлежать текущему пользователю.
У меня все еще была проблема выше, после установки postgresql с помощью homebrew - я разрешил ее, поставив /usr/local/bin на мой путь до/usr/bin
В нем простейшее объяснение; это проблема noob. Просто введите
pgres
приведет к этому отклику.
pgres <db_name>
будет успешным без ошибок, если у пользователя есть разрешения на доступ к db.
Можно вдаваться в детали переменных экспортируемой среды, но это необязательно. Это слишком просто для отказа по любой другой причине.
psql -d postgres -U postgres -h localhost
? Без флагов это по умолчанию для пользователя CLI, и я бы сказал, что это по умолчанию для "postgres" admin db, но у меня нет mac для тестирования.