psql:FATAL:ロール「postgres」が存在しません


405

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

$どの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に関連するすべてのものを削除し、すべてを再インストールしますか?

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


1
コンピュータを再起動します。Launchd from brew services start postresqlが実行されるようにします。
マイケルディミット2017年

回答:


410

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

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

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

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

少なくとも1つの役割がない場合 superuser場合は、問題があります:-)

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

sudo -u user psql user

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

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

しかし、あなたのpostgres.app設定はこれをしていないようですので、あなたもそうすべきではありません。チュートリアルを簡単に変更してください。


10
私にとって、ユーザーは作成されていませんでした-これは代わりCREATE USER postgres WITH SUPERUSER PASSWORD 'password'; にpostgres v10を使用しています。
arcseldon 2017年

230
からPostgresをインストールした場合は、ターミナルでhomebrew実行する必要があり/usr/local/opt/postgres/bin/createuser -s postgresます
user3402754

7
私は実行しなければなり/usr/local/opt/postgresql/bin/createuser -s postgres
ませんでした

1
@ user1807782あなたは私の日を救った。これを答えとして宣伝すべきだと思います。
tolga

1
特定のバージョンのpostgresを使用している場合は、バージョンをパスに含める必要があります/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

キーは、「Mac用のpostgres.appをインストールしました」です。このアプリケーションは、ローカルのPostgreSQLインストールを、ロール名がログイン(短い)名と同じデータベーススーパーユーザーでセットアップします。

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

一部のスクリプト(例: pgdump Linux systsemで)とチュートリアルでは、スーパーユーザーがの従来のロール名を持っていると想定していますpostgres

ローカルインストールをもう少し伝統的に見せて、一度行うことでこれらの問題を回避できます。

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

これは致命的です。「postgres」という役割はなくなります。


119
Homebrewのpostgresを使用している場合は、必要です/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(バージョン9.2.4の場合)。
Roger Lipscombe 2014年

1
postgres.app 9.3の場合、ディレクトリを再配置したようです。私は試しました:/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresですが、これは同じエラーメッセージを生成しました: "createuser:could not connect to database postgres:FATAL:role" postgres "does not exist "
マイケルコクソン2014

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres私のために正しく走った。
cjspurgeon 2014年

9
@RogerLipscombeあなたが実行した場合brew link postgresql、インストール後に全体のパスを追加する必要はありませんcreateuser、単純なcreateuser -s postgres偉大な動作します
AlessioX

2
createuser -s postgres私のために働いた。Homebrewでpostgresをインストールしました
biniam

228

Mac用:

  1. Homebrewをインストールする
  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


3
最新のBrewのインストールでbrew services start postgresqlpostgresを開始できます
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

これが最良の答えです
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

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

createuser postgres -s


私のpgadminがpostgresユーザーを要求し続け、私が最初にpostgresの役割を持っていることがわかったとき、この回答は役に立ちました。このコマンドで作成し、自動生成されたpwをpgadminに追加して問題を解決しました!
通常の

これは私にとっては機能しますが、この方法:「ユーザーpostgresを作成する」
Roberto Rodriguez

31

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

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

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

createuser --superuser postgres

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

initdbによって作成された他のユーザーアカウントを削除することを忘れないでください。


2
これは最も有益な答えです。
MyWrathAcademia

17

私にとって、このコードは機能しました:

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

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


私もうまくいきます!あなたは私のベーコンを救った。
Dave Munger

1
「私」というロールは存在しない
SuperUberDuper

この新しいposgresユーザーはパスワードを持たないということですか?
olaoluwa_98

16

解除する必要がありました$PGUSER

$ unset PGUSER
$ createuser -s postgres

1
ああ男、最終的に問題があったものを得た。ユーザーpostgresをユーザーpostgresとして作成しようとしていることが
わかり

14

まず、ユーザーを作成する必要があります。

sudo -u postgres createuser --superuser $USER

データベースを作成した

sudo -u postgres createdb $USER

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

完全なソリューションはこちらで確認できます


8

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

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


1
これは私のために働いた唯一のものです。ありがとうございました!
ハーブミーハン

4

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

それでも、SQLコマンドで再作成できます CREATE DATABASE postgres;

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

したがって、このコマンドの代わりに:をsudo -u postgres psql -U postgres発行するほうがpostgres.appの精神に反するpsqlことになります。これは、ユーザーの名前と一致するデータベースに自動的に接続し、同じ名前のdbアカウントがスーパーユーザーになっているため、権限に関しては何でもできます。


はい。しかしERROR: cannot drop the currently open database、ユーザーdbを削除しようとするとエラーが発生するのはなぜですか?それで、このpostgres.appを使うのは良い習慣ではありませんか?
user805981 2013年

接続中のデータベースは削除できません。とにかく、なぜそれを削除したいのですか?それはあなたの便宜のためにここにあります。
DanielVérité2013年

できるかどうか見たかっただけです。それで、psqlとpostgres.appを起動すると、デフォルトのデータベースが正しいように見えますか?では、アクセス権についてはどうでしょうか?もう設定できませんか?template0とtemplate1にアクセス権限があることが
わかり

@ user805981 Postgres.appはテストおよび開発を目的としています。これはHerokuのPostgreSQLパッケージであり、Ruby on Railsを使用して開発しているMacユーザーが、デフォルトのSQLiteではなくPostgreSQLを使用して簡単にテストできるように設計されています。RailsはSQLiteでテストしてPostgreSQLにデプロイする傾向があり、さまざまな問題を引き起こしたため、HerokuはPostgreSQLでも簡単にテストできるようにしました。Postgres.appテストには問題ありませんが、実稼働データや実際のデータに使用することは考えていません。それだけではありません。
クレイグリンガー

4

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

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

sudo -i -u postgres-xc
psql

2

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

createuser -s -U $USER

2
これにより、現在のユーザーが単にpostgresスーパーユーザーではなくシステムスーパーユーザーになります。これは通常のセキュリティポリシーを回避するため、一般的には悪い考えです。sudo一時的なスーパーユーザー権限を取得するには、ユーザーを使用する必要があります。
Sean Dawson

1

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

アドバイス-データベースのバックアップをとって、安全を確保してください。


0

psql -lはデータベースのリストを返すため、ここではsudoは必要ないと思います。これは、initdbがpostgresユーザーではなく、ユーザーの現在のユーザーの下で実行されたことを示しています。

次のことができます:

psql

そしてチュートリアルを続けます。

多くのアプリケーションがこれが存在することを期待している可能性があるため、postgresユーザーとdbを作成するというAHの一般的なポイントを提案します。

簡単な説明:

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


postgresのいくつかの重要な違いを明確にします。ありがとうございました。
imsrgadich 2018年

0

この問題brew services stop postgresqlは前日に発生したため、行き詰まりました。
次の日:brew services start postgresql動作しません。これは、homebrewを使用してインストールすると表示されるようになるためです。postgresqlはlaunchd ...を使用します。これは、コンピューターの電源がオンになったときにロードされます。

解決策:
brew services start postgresql
コンピューターを再起動します。


0

\duコマンドの戻り:

ロール名= postgres@implicit_files

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

エラー:ロール「postgres」は存在しません。

しかし、それpostgres=# \password postgres@implicit_filesはうまくいきます。

またsudo -u postgres createuser -s postgres、最初のバリアントの後 も機能します。

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