896

Mac 用の PostgreSql アプリ ( http://postgresapp.com/ ) を使用しています。過去に他のマシンで使用したことがありますが、Macbook にインストールするときに問題が発生します。アプリケーションをインストールして実行しました:

psql -h localhost

戻り値:

psql: FATAL:  database "<user>" does not exist

コンソールを実行して、検索しようとしているデータベースを作成することさえできないようです。実行すると同じことが起こります:

psql 

または、アプリケーションのドロップダウン メニューから psql を起動すると、次のようになります。

マシン統計:

  • OS X 10.8.4

  • psql (PostgreSQL) 9.2.4

どんな助けでも大歓迎です。

また、homebrew を介して PostgreSql をインストールしようとしましたが、同じ問題が発生しています。また、次のように記載されているアプリケーションのドキュメント ページも読みました。

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

したがって、アプリケーションは $USER を作成していないように見えますが、インストール->アンインストール-再インストールを数回行ったので、私のマシンに何かあるに違いありません。

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

psql -d template1

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

4

24 に答える 24

1380

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

psql -d template1

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

createdb

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

psql -h localhost

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

于 2013-07-29T23:40:57.067 に答える
212

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

psql -U Username DatabaseName 
于 2014-02-17T11:10:31.673 に答える
77
  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.
于 2014-11-03T19:52:46.373 に答える
52

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

ユーザー ID を使用してデータベースを作成します。

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)
于 2015-02-24T07:26:09.733 に答える
8

ステップ1:

psql -d template1

今、あなたはpsqlターミナルにいるはずです

ステップ2:

CREATE DATABASE username;

データベース名の後に必ずセミコロン (;) を使用してください

オプション: psql ターミナル タイプで\ls、または\lすべてのデータベースを一覧表示します。

ステップ 3:

psql -h localhost

これで接続されているはずです。

于 2021-06-22T21:47:39.557 に答える
7

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

于 2014-08-26T03:33:09.190 に答える
5

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

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

psql -d db_name -f query_file.sql
于 2014-08-17T09:58:29.593 に答える
5

createdbのドキュメントには次のように記載されています。

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

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

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

于 2015-02-24T13:24:09.343 に答える
3

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

「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) が含まれています。

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

于 2016-09-15T06:12:35.477 に答える
2

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

詳細については、http ://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT を参照してください。

于 2014-08-26T13:38:50.727 に答える
1

既存のスーパーユーザー経由で postgres に接続します。

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

create database username;

ここで、ユーザー名を介して接続を試みます

于 2019-06-07T10:42:58.377 に答える
0

pgAdmin ツールを使用していて、サーバーに接続しようとしているときにこのエラーが発生する場合は、そのサーバーの [プロパティ] の [接続] タブで、「メンテナンス データベース」としてリストされているデータベースが存在することを確認します。

名前付きデータベースが削除され、ログインが機能しなくなる場合、この値は自動的に更新されません。それでもうまくいかない場合は、残りの接続値が正しいことを確認してください。

于 2021-11-05T17:53:03.920 に答える