PostgreSQLエラー:致命的:ロール「ユーザー名」が存在しません


732

PostgreSQL 9.1を設定しています。PostgreSQLでは何もcreatedbできませんcreateuser。できません、できません。すべての操作でエラーメッセージが返される

Fatal: role h9uest does not exist

h9uestは私のアカウント名です。私はsudo apt-get installこのアカウントでPostgreSQL 9.1を使用しています。アカウントで
も同様のエラーが発生しrootます。


1
その後FATAL: role "user" is not permitted to log in、に遭遇するかもしれませんが、dba.stackexchange.com / questions / 57723 /…をチェックしてください。
kqw 2014

19
ここでこの質問に答えました。このチュートリアルも読んでください「Ubuntu LinuxにPostgresをインストールする方法」。
ruzenhack

@Ruzenhackそのチュートリアルリンクはまさに​​私が必要としたものでした!非常に明確でシンプル
dwanderson

4
psql -h localhost -U postgres
Metin Atalay 2016年

あなたがエラーを取得した場合role doesn't exist、エラーをcan't create role, it already existsこの答えをチェックアウト:stackoverflow.com/a/56658832/1689770
ジョナサン・

回答:


774

使用するオペレーティング・システム・ユーザーを postgres使用してデータベースを作成するために-長い間、あなたが設定していないとしてとしてデータベース(同じ名前のオペレーティング・システム・ユーザーに対応することが必要な権限を持つ役割をh9uest、あなたの場合):

sudo -u postgres -i

ここここがお勧めです

その後、再試行してください。入力exitシステム・ユーザーとして動作して行われたときpostgres

または単一のコマンドを実行するcreateuserpostgressudo同じように、ドレースによって実証され、別の答えインチ

重要なのは、同じ名前のデータベースロールに一致するオペレーティングシステムユーザーを使用して、ident認証によるアクセスを許可することです。postgresデータベースクラスタを初期化したデフォルトのオペレーティングシステムユーザーです。マニュアル:

データベースシステムをブートストラップするために、新しく初期化されたシステムには、常に1つの事前定義されたロールが含まれています。このロールは常に「スーパーユーザー」であり、デフォルトでは(実行中に変更されない限りinitdb)、データベースクラスターを初期化したオペレーティングシステムユーザーと同じ名前になります。通常、このロールの名前はになりますpostgres。さらに多くのロールを作成するには、最初にこの初期ロールとして接続する必要があります。

非標準のユーザー名を使用した、またはオペレーティングシステムのユーザーが存在しない、奇妙なセットアップについて聞いたことがあります。そこで戦略を適応させる必要があります。

マニュアルでデータベースの役割クライアント認証について読んでください。


1
sudo etcユーザーpostgresとして実行することはできません...プログラムのインストール方法は?このS2geometryインストールの問題を参照してください。
Peter Krauss、

構成によっては、単に必要になる場合もありsu postgresます。
Fabien Snauwaert、

1
sudo -u postgres機能しているが機能しないsudo -u postgres -i-i旗は何をしますか?
パーサー

1
@parsecer:に似てsuいますが、sudo権限に基づいた対話型シェルが起動されます。を参照してくださいman sudo
Erwin Brandstetter

284

他の多くの人の解決策を試した後、成功しなかったので、この答えはようやく私を助けました。

https://stackoverflow.com/a/16974197/2433309

つまり、ランニング

sudo -u postgres createuser owning_user

owning_user(この場合はh9uest)という名前のロールを作成します。その後rake db:create、Postgres環境に入らなくても、設定したアカウント名でターミナルから実行できます。


29
この後に「権限不足」エラーが発生した場合は、上記のコマンドに-sフラグを追加できます。これにより、新しいユーザーがスーパーユーザーとして作成されます。これを行うことにした場合は、これがセキュリティに与える影響に注意してください。
2015年

1
「不十分な権限」を取得していますが、エラーが発生しました:ロール「username」はすでに存在しています。
ウィリアムジャッド

4
@ConnorLeech 'postgres'をPGスーパーユーザーの名前に置き換えることができます。私の場合、それは私の名前でした。
myfashionhub 2016

1
私もを使用する-s必要があり、使用する必要はありませんでしたsudo -u postgres(ちょうどcreateuser new_userうまくいった)
Meekohi 2017

2
psql: FATAL: role "jonny" does not exist大丈夫そう sudo -u postgres -s createuser jonnyなぜ createuser: creation of new role failed: ERROR: role "jonny" already exists
ジョナサン・

134
sudo su - postgres

psql template1

「スーパーユーザー」としての特権を持つpgsqlのロールを作成する

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

次に、ユーザーを作成します

CREATE USER username; 
eg. CREATE USER demo;

ユーザーに特権を割り当てる

GRANT ROOT TO username;

そして、そのユーザーのログインを有効psql template1にして、通常の$ターミナルからeg:を実行できるようにします。

ALTER ROLE username WITH LOGIN;

4
私はPostgreSQL 9.4.4の新規インストールを行っただけで、以下を使用して新しいスーパーユーザーを作成することができました。 CREATE ROLE username superuser createdb login; これは3つのステップすべてを組み合わせたものです...
iPad Guy

25
#GRANT ROOTを私に。エラー:ロール「root」は存在しません
シャッカー、

6
シンプルなバージョン: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela 2017

2
@shacker#GRANT postgres TO username
7kemZmani

ルートを使用してサーバーを起動してから、 `` `psql -U postgres -h 127.0.0.1 --command" CREATE USER postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` pg_identに追加した場合、rootを使用してこれを実行できますか?
Shivangi Singh

85

を使用apt-getしてpostgresをインストールしても、ユーザーロールやデータベースは作成されません。

個人ユーザーアカウントのスーパーユーザーロールとデータベースを作成するには:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


1
:私はのような第2の部分を実行するために必要なsudo -u postgres createdb $(whoami)

2
@SanD(-s最初のコマンドのフラグを使用して)スーパーユーザーとして独自のユーザーアカウントを作成した場合は、自分でデータベースを作成できます。createdbとして実行する必要はありませんpostgres
マイルズエリクソン2018

2
正解です。デバッグの時間を節約できました!!
加納

79

これは私にとってはうまくいきます:

psql -h localhost -U postgres

上記のユーザーのパスワードを追加してください。
Chaudhry Waqas 2018年

1
@Vincentは、PostgreSQLのインストール後にパスワードが変更されなかった場合、デフォルトで変更されますpostgres(LinuxおよびWindowsでテスト済み)。
silvioprog

1
role postgres does not exist
Jacob Schneider、

15

作業方法、

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer ここでピア信頼するように変更します
  3. 再起動、 sudo service postgresql restart

  4. 今試してください、 psql -U postgres


1
このtrust方法が完全に安全な環境でのみ推奨されることは明らかです。信頼できない接続からのアクセスは可能ですが、そのようなDBクラスターを公開しないでください。
Erwin Brandstetter

これは良い
horoyoi o

チェック:postgresqlサービスが開始されていない場合は、ファイルに何らかのエラーがある可能性がありますpg_hba.conf
ウォーク


11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

4
psql postgres結果:psql: FATAL: role "root" does not exist
TomSawyer、

2
psql postgres -U postgres?持っているユーザー(-U)によって異なります。
Meadowlark

ありがとうございました!postgresのパスワードがわからないため、rootでpostgresqlをバックアップする方法に苦労しました
Dika

7

rootユーザープロンプトではなくローカルユーザープロンプトで、次のように入力します。

sudo -u postgres createuser <local username>

次に、ローカルユーザーのパスワードを入力します。

次に、「ロール 'username'は存在しません」を生成した前のコマンドを入力します。

上記の手順で問題が解決しました。そうでない場合は、上記の手順のターミナルメッセージを送信してください。



3

私の場合、DBクラスターを手動で作成すると解決しました。

なんらかの理由で、postgresをインストールしたときに「初期DB」が作成されませんでした。実行するinitdbことは私にとってはトリックでした。

このソリューションはPostgreSQL Wikiで提供されています-最初のステップ

initdb

通常、OSにpostgresをインストールすると、「初期DB」が作成され、postgresサーバーデーモンが実行されます。そうでない場合は、initdb実行する必要があります。



0

次の手順に従ってください:あなたのために働くでしょう:

  1. 走る msfconsole
  2. タイプdb_console
  3. いくつかの情報が表示されますので、作成するように指示する情報を選択してください。db_connect user:pass@host:port.../database申し訳ありませんが、覚えていないようですが、ユーザーとパスワード、ホストとデータベースをdatabase.yml、プレースメントに含まれている情報に置き換えます:/usr/share/metasploit-framework/config
  4. あなたが見るでしょう。バックグラウンドでモデルキャッシュを再構築します。
  5. 「apt-get update && apt-get upgrade msfconsole: msf>db_status」と入力し、ターミナルを再起動してmsfconsoleをランチします。動作します。入力すると、接続されていることを確認できます。

0

--no-owner --no-privilegesフラグを付けてダンプおよび復元する

例えば

投げ捨てる - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

戻す - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

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