web-dev-qa-db-ja.com

psql:FATAL:データベース "<user>"は存在しません

私はMac用のPostgreSqlアプリを使っています( 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をインストールしようとしましたが、同じ問題が発生します。私はまた、アプリケーションのドキュメントページを読んでいます:

Postgres.appが最初に起動すると、$ USERデータベースが作成されます。これは、何も指定されていない場合のpsqlのデフォルトデータベースです。デフォルトのユーザーはパスワードなしの$ USERです。

そのため、アプリケーションは$ USERを作成していないように見えますが、インストール - >アンインストール - 再インストールを何度か繰り返したので、私のマシンでは問題ないはずです。

私は答えを見つけましたが、それがこのスレッドで答えたユーザーとしてどのように機能するか正確にはわかりません - > PostgresqlをMacで起動する:データベース "postgres"が存在しません 追いかけませんでした。 psqlを開くために次のコマンドを使いました。

psql -d template1

これが機能する理由について誰かが説明を提供できるようになるまで、私はこれを未回答のままにします。

580
Ryan Rich

パッケージマネージャが$ userという名前のデータベースを作成できなかったようです。その理由

psql -d template1

template1はpostgres自身によって作成されたデータベースであり、すべてのインストールに存在することがあなたのために働きます。あなたは明らかにtemplate1にログインすることができるので、あなたはデータベースによってあなたに割り当てられた何らかの権利を持っていなければなりません。シェルプロンプトでこれを試してください。

createdb

それから、もう一度ログインできるかどうかを確認します。

psql -h localhost

これは単にあなたのログインユーザーのためのデータベースを作成するでしょう、私はあなたが探しているものだと思います。 createdbが失敗するなら、あなたはあなた自身のデータベースを作るための十分な権利を持っていません、そしてあなたは自作パッケージを修正する方法を考え出す必要があるでしょう。

1003
Kirk Roybal

端末から、コマンドプロンプトウィンドウでコマンドを実行するだけです。 (psql内にはありません)

createdb <user>

そしてpostgresをもう一度実行してみてください。

126
Dhananjay

デフォルトでは、postgresはあなたのユーザと同じ名前のデータベースへの接続を試みます。このデフォルトの動作を防ぐには、単にユーザーとデータベースを指定します。

psql -U Username DatabaseName 
116
Aneer Anwar
  1. デフォルトユーザーとしてログインします。Sudo -i -u postgres
  2. 新しいユーザーを作成します。createuser --interactive
  3. 役割名の入力を求められたら、linux usernameと入力し、[はい]を選択してスーパーユーザーに質問します。
  4. まだpostgresユーザーとしてログインしている、データベースを作成する:createdb <username_from_step_3>
  5. コマンドプロンプトでpsqlと入力してエラーがなくなったことを確認します。
  6. 出力はpsql (x.x.x) Type "help" for help.を示すはずです
49
user286539

デフォルトの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)
37
spicyramen

私はMac上でpostgresqlを開こうとしたとき私は同じエラーに直面しました

psql: FATAL:  database "user" does not exist

私はそれを解決するためにこの簡単なコマンドを見つけました:

method1

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

とタイプ

 psql

方法2:

psql -d postgres
16
Dinesh Pallapa

このエラーは、環境変数PGDATABASEが存在しないデータベースの名前に設定されている場合にも発生する可能性があります。

OSXで、Postgress.appメニューからpsqlを起動しようとしたときに次のエラーが表示されました。

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を削除することです。

5
sdhca

同じ問題があった場合は、単純なpsql -d postgresがそれを行いました(端末にコマンドを入力します)。

4
rust

この質問は検索結果の最初の質問なので、タイトルが重複しないように、ここでは別の問題に対して別の解決策を示します。

データベースを指定せずにpsqlでクエリファイルを実行すると、同じエラーメッセージが表示されることがあります。 postgresqlにはuseステートメントがないので、コマンドラインでデータベースを指定する必要があります。例えば:

psql -d db_name -f query_file.sql
4

createdbのドキュメントとして

最初のデータベースは、データ記憶領域の初期化時にinitdbコマンドによって常に作成されます。このデータベースはpostgresと呼ばれます。

そのため、特定のOS/postgresqlディストリビューションがこれとは異なる動作をする場合、それは確かにデフォルト/標準ではありません(openSUSE 13.1のinitdbがDB "postgres"を作成し、 "<user>"は作成しないことを確かめます)。要するにpsql -d postgresは "postgres"以外のユーザを使うときに使われることが期待されています。

明らかに、ユーザーのような名前のDBを作成するためにcreatedbを実行するという、受け入れられた答えも同様に機能しますが、余分なDBを作成します。

4
user686249

jDBCドライバの使用に問題があったので、URLのホスト名の後にデータベースを追加する必要があります(おそらく使用するツールによっては冗長になります)。jdbc:postgres://<Host(:port)>/<db-name>

詳細はここに文書化されています: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

1

まず最初に、現在使用しているものと同じ名前のデータベースを作成して、デフォルトのデータベースを使用してdbの名前を明示的に宣言せずに新しいテーブルを作成する場合のエラーを防ぐのに役立ちます。

"skynotify"をあなたのユーザー名に置き換えてください。

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

-dこの対話型セッション中に明示的にdb名を含まない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)

返された行がゼロであっても、フィールド名がわかります。

テーブルに12行以上ある場合、または確信が持てない場合は、データベース内のデータ量を理解するために、行数から始めるほうが便利です。

 psql -d Ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

 count 
-------
     0
(1 row)

そして、その「1行」はあなたを混乱させないでください、それは単にクエリによって返される行数を表しますが、1行はあなたが望むカウントを含んでいます、この例では0です。

注:所有者を定義せずに作成されたデータベースは、現在のユーザーが所有します。

0
Sky Notify

私はこれらの解決策のいくつかを試してみましたが、それらはあまりうまくいきませんでした。

結局私のエラーは次のとおりです。

FATAL:ユーザーのパスワード認証に失敗しました

次のコマンドを実行したとき:psql

それで、私はこれら二つのコマンドを走らせました:

dropdb()
createdb()

注:これで will dbは削除されますが、私はそれを必要としていなかったので、何らかの理由でpqslにアクセスできなくなったので、削除して再作成しました。それからpsqlはまた働きました。

0
Ben Cartwright

既存のスーパーユーザーを介してpostgresに接続します。

あなたがpostgresに接続しているユーザーの名前でデータベースを作成します。

create database username;

今すぐユーザー名で接続してみてください

0