psql:致命的:データベース“ <user>”は存在しません


723

Mac(http://postgresapp.com/)用のPostgreSqlアプリを使用しています。過去に他のマシンで使用したことがありますが、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を作成していないように見えますが、インストール->アンインストール-再インストールを数回実行したので、私のマシンでは何かが必要です。

私は答えを見つけましたが、このスレッドで答えたユーザーとしてどのように機能するか正確にはわかりません-> MacでPostgresqlを実行する:データベース "postgres"が存在しないため、フォローアップしませんでした。次のコマンドを使用して、psqlを開きました。

psql -d template1

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


3
何がpsql -d postgres -U postgres -h localhost表示されますか?フラグがないと、デフォルトでCLIユーザーになり、デフォルトで「postgres」admin dbになると言いましたが、テストするMacがありません。
bma 2013

私はのpsql与え@bma:FATAL: - >役割「Postgresは」もともと私をここに持っている、存在しないstackoverflow.com/questions/15301826/...を。私はその答えを使おうとしましたが、同じ結果が得られます-> psql:致命的:データベース「ユーザー」は存在しません
Ryan Rich

dbログを確認しましたか?もっと詳細が出てくるのかな。
bma 2013

12
私も同じ問題を抱えていました。ちょうどcreatedb <user>私のために働いた。
poshaughnessy 2013

コマンドをとして実行psql -U user -d postgresすると、ユーザーが既に存在するpostgresデータベースに確実に接続されます。したがって、ログイン中にもデータベースを渡す必要があります。
Anil、

回答:


1172

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

psql -d template1

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

createdb

次に、再度ログインできるかどうかを確認します

psql -h localhost

これにより、ログインユーザーのデータベースが作成されます。これは、あなたが探しているものだと思います。createdbが失敗した場合は、独自のデータベースを作成するための十分な権限がないため、homebrewパッケージを修正する方法を理解する必要があります。


38
私の場合$ createdb -h localhost、エラーを解決するために書いたcould not connect to database postgres: could not connect to server。その後、私は経由でpostgresqlコンソールに接続できpsql -h localhostます。
ExiRe 2014年

それでもパスワードプロンプトが表示され、どれがデフォルトのpostgresアプリパスワードであるかがわかりません。
LasagnaAndroid 2014年

2
ありがとう@カーク。-d template1最初のコマンドで本当に必要ですか?インターネット上のチュートリアルで「テンプレート1」を見たことがありますが、それは私を混乱させるだけのものです。より論理的なアプローチは、私の意見では、1)PostgreSQLユーザーを作成します(例: "usera")2)ユーザー "usera"と同じ名前のデータベースを作成します(これはクレイジーだと思いますが、PostgreSQLが必要とするようです)3)スーパーユーザー "postgres"としてPostgreSQLにログインし、データベース "usera"の特権をユーザー "usera"に割り当てます(これは本当に現実の生活ですか?)
ericn

@eric:-d template1は、OPがログインできることを確認するためだけにあります。これはinitdb時に作成されるため、常に存在し、簡単なチェックでした。それ以降は、通常、手順は「実生活」です。
Kirk Roybal 2015

@ExiReたった1つの簡単なコマンドで、私が抱えていた大きな頭痛を治しました。ありがとう!
Dave Munger、2015

193

ターミナルから、コマンドプロンプトウィンドウでコマンドを実行するだけです。(psql内ではありません)

createdb <user>

そして、再度postgresを実行してみてください。


3
綺麗な!やった!これを実行すると、すべてのpsqlコマンドが魅力のように機能します。トンありがとう!
博物学者2016年

1
そして、私はpsqlテンプレートで試していました。いまいましい
user1735921

2
また、実行することもできますcreatedb
Mantisimo

私のようなユーザー向けのヒント;)(psql内ではありません)。ターミナルウィンドウを開いたときに、このcreatedbを最初のコマンドとして入力し、psqlにログインしてみます。
Rohan Dodeja

すごい!OSXで私のために働いた。
darkhipo

150

デフォルトでは、postgresはユーザーと同じ名前のデータベースに接続しようとします。このデフォルトの動作を回避するには、ユーザーとデータベースを指定するだけです。

psql -U Username DatabaseName 

14
おかげで、そのような設計の理由を知っていますか?なぜ世界でデフォルトで自分の名前のデータベースに移動したいのですか?
ericn 2015年

3
@ericデータベースは、専用ユーザーとして実行されているサービスでよく使用されます。したがって、ユーザー名をデフォルトのデータベース名として使用する方が、固定されたデフォルトのデータベース名(「postgres」など)を使用するよりもおそらく便利でしょう。
user686249 2015年

5
実際にデータベースを作成するSQLスクリプトをどのように実行しますか?:私の目標は、他のDBを作成するときに、私の場合、それは常にデータベース<ユーザー>に接続しようとするpsql -U Username -f create_db.sql:これはエラーを返しますdatabase Username doesn't exists
Kostanos

素晴らしい答えに感謝しますが、なぜコマンドラインのヘルプにないのですか?psql --help
Shawn Vader

1
psql -U Username postgresデータベースがまだない場合
Anatolii Stepaniuk

59
  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.

男、あなたは私に多くの時間を節約してくれました。
Jp Reddy 2017

Windowsでこれを行う必要がありました。新しいpgユーザー名をLinux unに設定します。修繕。
RichieRich

これは魅力のように私のために働いた
プロミスプレストン

42

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

20

Macでpostgresqlを開こうとすると、同じエラーが発生しました

psql: FATAL:  database "user" does not exist

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

方法1

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

そしてタイプ

 psql

方法2:

psql -d postgres

5
方法2は、私の人生を救った
tom10271

9

同じ問題がありましたが、単純にpsql -d postgresそれを行いました(ターミナルでコマンドを入力してください)


6

このエラーは、環境変数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

postgresのインストール後、私のバージョンは12.2ですが、以下のコマンドを実行しましたcreatedb

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

これは私のために働いた歓声
FaISalBLiNK

4

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

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

psql -d db_name -f query_file.sql

1
そして、db template1は常に存在します
jan

4

createdbのドキュメントの状態:

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

したがって、特定のOS / postgresqlディストリビューションが異なる方法で実行する場合、それは確かにデフォルト/標準ではありません(initdbopenSUSE 13.1でDB「postgres」が作成されるが、「<user>」は作成されないことを確認するだけです)。一言で言えば、psql -d postgres「postgres」以外のユーザーを使用する場合に使用することが予想されます。

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


1

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

詳細については、こちらをご覧くださいhttp : //www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


私はそれがpsqlだけを求められたのでそれが少し外れていることを知っていますが、Googleが私の問題をここに持ってきたので、ここで言及する価値があると思います
Andreas Dietrich

1

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

postgresに接続するユーザーの名前でデータベースを作成します。

create database username;

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


1

使用してみてください

psql -d postgres

走ったときも同じ問題に直面していた psql


0

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

"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)

返される行がゼロの場合でも、フィールド名を取得します。

テーブルに12を超える行がある場合、または不明な場合は、行の数から開始して、データベース内のデータ量を理解することをお勧めします。

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

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

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

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


0

これらの解決策のいくつかを試しましたが、うまくいきませんでした(ただし、順調に進んでいます!)

最後に私のエラーは:

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

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

そこで、次の2つのコマンドを実行しました。

dropdb()
createdb()

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


0

回答にすでに追加されているかどうかは不明ですが、Anatolii Stepaniuk回答は次のように非常に役に立ちました。

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

-1

homebrewを介してpostgresqlをインストールするときにこの問題が発生していました。

デフォルトで「postgres」スーパーユーザーを作成する必要がありました:

createuser-インタラクティブなpostgresがスーパーユーザーの場合はyと答える

createuser-インタラクティブユーザーがスーパーユーザーの場合はyと答えます


-3

homebrewを使用してpostgresqlをインストールした後も上記の問題がありました-/ usr / binの前のパスに/ usr / local / binを置くことで解決しました


-12

それは最も簡単な説明です。それはnoobの問題です。入力するだけ

pgres

この応答になります。

pgres <db_name> 

ユーザーがデータベースにアクセスする権限を持っている場合、エラーなしで成功します。

エクスポートされた環境変数の詳細に入ることができますが、それは不必要です。これは他の理由で失敗するには基本的すぎます。


5
「noob issue type of language」が本当に気に入らない
Kimmo Hintikka

また、問題の解決方法も推奨されなかったため、質問には回答しませんでした。
デボラ

1
聞いたことがないpgres
Glenn Plas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.