postgresql - ログイン windows postgres psql:致命的:データベース "<user>"は存在しません



8 Answers

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

psql -U Username DatabaseName 
postgresql 使い方 windows

私は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

どんな助けもありがとうございます。

私はまた、homebrew経由でPostgreSQLをインストールしようとしましたが、私は同じ問題を抱えています。 また、次のようなアプリケーションのドキュメントページも読んでいます。

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

だから、アプリケーションが$ USERを作成していないように思えるかもしれませんが、私はインストール済みの>アンインストール済みのものを数回再インストールしたので、自分のマシンで何かをする必要があります。

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

psql -d template1

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




  1. デフォルトユーザーとしてログイン: sudo -i -u postgres
  2. 新しいユーザーを作成する: createuser --interactive
  3. 役割名の入力を求められたら、linux usernameと入力し、スーパーユーザーの質問に対してYesを選択します。
  4. まだpostgresユーザーとしてログインして、データベースを作成します: createdb <username_from_step_3>
  5. コマンドプロンプトで次のように入力して、 psqlを入力してエラーを確認してください。
  6. 出力にはpsql (xxx) Type "help" for help.表示さpsql (xxx) Type "help" for help.



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

psql: FATAL:  database "user" does not exist

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

方法1

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

タイプ

 psql

方法2:

psql -d postgres



createdbドキュメントには次のように書かれています。

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

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

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




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




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

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

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

-dは、この対話型セッション中に明示的にdb名を含まないSQL文のデフォルトとして使用するデータベースを明示的に宣言します。

あなたの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)

ゼロ行が返されたとしても、フィールド名を取得します。

テーブルに12行以上の行がある場合や、わからない場合は、行数で開始して、データベースに格納されているデータの量を把握すると便利です。

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

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

そして、 "1行"はあなたを混乱させるものではなく、クエリによって返される行の数を表していますが、1行には必要な数が含まれています。この例では0です。

注:定義された所有者なしで作成されたdbは、現在のユーザーによって所有されます。




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

デフォルトの "postgres"スーパーユーザを作成しなければならなかった:

createuser - 対話的なpostgresは、スーパーユーザーのためにyと答える

createuser - 対話的なユーザは、スーパーユーザのためにyを答えます。




Capistranoで Railsプロジェクトをデプロイするときにこのエラーが発生する場合は、リモートサーバーにデータベースを作成することができます。

あなたのUbuntuにログインし、以下を実行してください:

sudo -u postgres psql

プロンプトが表示されたら、あなたのpostgresユーザーパスワードを入力してください。 次に、次のように入力してデータベースを作成します。

CREATE DATABASE dbname_production;

名前は、本番サーバーのshared/config/database.ymlで指定した名前でなければなりません。

\q入力して終了する




Related