1. ホーム
  2. マコス

[解決済み】psql: FATAL: ロール "postgres" が存在しない

2022-05-03 07:24:13

質問

postgresの初心者です。

mac用のpostgres.appをインストールしました。psqlコマンドを弄っていたら、誤ってpostgresデータベースを落としてしまいました。何が入っていたのかわかりません。

現在、チュートリアルを作成中です。 http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

で止まっています。 sudo -u postgres psql postgres

ERROR MESSAGE: psql: FATAL: role "postgres" does not exist

$ which psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

の出力はこんな感じです。 psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

では、どのような手順を踏めばいいのでしょうか?psqlに関連するものをすべて削除し、すべてを再インストールするのですか?

ありがとうございました。

解決方法は?

注意: homebrew を使用して postgres をインストールした場合、以下の @user3402754 のコメントを参照してください。

エラーメッセージに注意 NOT は、データベースが見つからないという話ではなく、ロールが見つからないという話です。ログイン処理の後半で、足りないデータベースについてつまずくかもしれません。

しかし、まずは足りないロールを確認することが先決です。の中の出力は何ですか? psql コマンドの \du ? 私のUbuntuシステムでは、関連する行は次のようになります。

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

を持つロールが少なくとも1つ存在しない場合 superuser であれば、問題があります :-)

あれば、それを使ってログインすることができます。そして、あなたの \l コマンドを実行します。のパーミッションは user を使用します。 template0template1 データベースは、私のUbuntuシステムでのスーパーユーザー用の postgres . ですから、あなたのセットアップでは、単純に user をスーパーユーザとして使用します。そこで、以下のコマンドでログインしてみてください。

sudo -u user psql user

もし user が本当にDBスーパーユーザーであれば、別のDBスーパーユーザーと、その人のためのプライベートな空のデータベースを作成することができます。

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

しかし、あなたのpostgres.appのセットアップではこのようなことはしないようなので、あなたもそうすべきです。チュートリアルを参考にしましょう。