web-dev-qa-db-ja.com

psql:FATAL:ロール "postgres"は存在しません

私はpostgresの初心者です。

私はmac用postgres.appをインストールしました。私はpsqlコマンドで遊んでいて、誤ってpostgresデータベースを削除しました。何があったのかわかりません。

私は現在チュートリアルに取り組んでいます: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/ /

そして私はSudo -u postgres psql postgresで立ち往生しています

エラーメッセージ: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に関連するすべてのものを削除し、すべてを再インストールしますか?

助けてくれてありがとう!

295
user805981

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

エラーメッセージはではなく欠落しているデータベースについて話し、欠落している役割について話していることに注意してください。ログインプロセスの後半で、不足しているデータベースにつまずくこともあります。

しかし、最初のステップは、欠落している役割をチェックすることです。コマンド\dupsql内の出力は何ですか?私のUbuntuシステムでは、関連する行は次のようになります。

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

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

ある場合は、それを使用してログインできます。 \lコマンドの出力を見ると、template0およびtemplate1データベースに対するuserの権限は、スーパーユーザーpostgresのUbuntuシステムと同じです。したがって、単純なセットアップでは、userをスーパーユーザーとして使用すると思います。このコマンドを試してログインできます:

Sudo -u user psql user

userが実際にDBスーパーユーザーである場合、別のDBスーパーユーザーと、彼のためのプライベートな空のデータベースを作成できます。

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

ただし、postgres.appのセットアップではこれを行っていないようですので、そうすべきではありません。チュートリアルを簡単に調整します。

311
A.H.

キーは "私はmac用postgres.appをインストールした"です。 このアプリケーション はロール名があなたのログイン(ショート)名と同じであるデータベーススーパーユーザでローカルPostgreSQLインストールをセットアップします。

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

いくつかのスクリプト(例えば、Linuxシステム上でpgdumpで作成されたデータベースのバックアップ)やチュートリアルでは、スーパーユーザーはpostgresという伝統的なロール名を持っていると仮定します。

あなたはあなたのローカルインストールをもう少し伝統的に見せて、一度することによってこれらの問題を避けることができます:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

これらは 致命的になるでしょう:ロール "postgres"は存在しません 消えます。

236
jwd630

Mac用:

  1. 自作をインストール
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. 最新バージョンをそのまま使用する/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresまたは/usr/local/opt/postgres/bin/createuser -s postgres
  5. postgresサーバーを手動で起動します。pg_ctl -D /usr/local/var/postgres start

起動時にサーバーを起動する

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

これでセットアップされ、psql -U postgres -h localhostを使用してログインするか、またはGUIにPgAdminを使用します。

デフォルトでは、ユーザpostgresはログインパスワードを持ちません。

このようなより多くの記事のためのこの場所を点検しなさい: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

182
Nitin
createuser postgres --interactive

またはスーパーユーザーをpostgresにするだけで

createuser postgres -s
31

私にとって、このコードはうまくいきました:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

それはここから来ました: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

15
Kevin Zhao

最初に あなたはユーザーを作成する必要があります:

Sudo -u postgres createuser --superuser $USER

の後にデータベースを作成します。

Sudo -u postgres createdb $USER

$USERをシステムのユーザー名に変更します。

あなたは完全な解決策を見ることができます ここ

11
ruzenhack

$PGUSERの設定を解除する必要があります。

$ unset PGUSER
$ createuser -s postgres
10
Beau Barker

コマンドラインでこれを実行すると修正されるはずです

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

7
Alex Levine

これは、initdbユーザー名を--username=postgresまたは-U postgresで指定せずに、IDがpostgresではないユーザーでpostgresを実行した場合に発生します。

Initdbを実行するために使用したシステムのユーザーアカウントを使用してデータベースクラスタが作成され、スーパーユーザー権限が与えられます。

これを修正するには、Postgresに付属のpostgresユーティリティを使って、オプション--superuserを付けてcreateuserという名前の新しいユーザーを作成するだけです。このユーティリティはPostgresのbinディレクトリにあります。例えば.

createuser --superuser postgres

カスタムのホスト名またはポートがある場合は、必ず 適切なオプションを設定してください

Initdbによって作成された他のユーザーアカウントを忘れずに削除してください。

4
isapir

postgresname__データベースを削除しても問題ありません。このデータベースは最初は空であり、その目的は単にpostgresname__ユーザーが接続するための一種の「ホーム」を持つことです。

それでも、あなたはSQLコマンドCREATE DATABASE postgres;でそれを作り直すかもしれません

質問で言及されているチュートリアルはpostgres.appを念頭に置いて書かれていないことに注意してください。一般的なUnix用のPostgreSQLとは反対に、postgres.appは通常のユーザーとは異なる特権を持つ専用のpostgresname__ユーザーによって実行されるサービスとは対照的に、通常のアプリケーションのように見えます。 postgres.appはあなた自身のアカウントで実行、管理されています。

そのため、このコマンド:Sudo -u postgres psql -U postgresの代わりに、postgres.appの精神に従うことをお勧めします。psqlname__は、ユーザー名と一致するデータベースに自動的に接続し、スーパーユーザーになるdbアカウントを使用しますそのため、パーミッション的には何でもできます。

4
Daniel Vérité

それが価値があるもののために、私はubuntuと多くのパッケージをインストールしました、そしてそれはそれと衝突しました。

私にとって正しい答えは:

Sudo -i -u postgres-xc
psql
3
softwareplay

これは私のためにそれを修正した唯一のものです:

createuser -s -U $USER
1
Bax

Ubuntuシステムでは、PostgreSQLを削除して再インストールしました。すべてのデータベースが復元されます。これで問題は解決しました。

アドバイス - データベースのバックアップを取って、安全性を高めます。

1
Gaurav Neema

私は前日にbrew services stop postgresqlを実行したことでこの問題に行き詰まった。
翌日:brew services start postgresqlは機能しませんでした。これは、自作を使ってインストールしたときに表示されるとおりです。 postgresqlはlaunchd ...を使用します。これはあなたのコンピュータの電源が入った時にロードされます。

解決:
brew services start postgresql
コンピュータを再起動してください。

0
Michael Dimmitt

\duコマンドは以下を返します。

ロール名= postgres@implicit_files

そしてそのコマンドpostgres=# \password postgresはエラーを返します。

エラー:役割 "postgres"は存在しません。

しかし、postgres=# \password postgres@implicit_filesは問題なく動作します。

Sudo -u postgres createuser -s postgresの後でも、最初の変種は動作します。

0
Michael

Psql -lがデータベースのリストを返すので、私はここでSudoが必要だとは思わない。これはinitdbがpostgresユーザーの下ではなく、ユーザーの現在のユーザーの下で実行されたことを私に告げています。

あなただけです:

psql

そしてチュートリアルを続けてください。

多くのアプリケーションがこれが存在することを期待しているかもしれないので、私はA.Hがpostgresユーザーとdbを作成する一般的なポイントを提案するでしょう。

簡単な説明

PostgreSQLはオペレーティングシステムへの管理者権限では動作しません。代わりに通常のユーザーで実行し、ピア認証をサポートするために(接続しようとしているOSに問い合わせる)、初期化プロセスを実行するユーザーでユーザーとdbを作成します。この場合それはあなたの普通のユーザーでした。

0
Chris Travers