Createuser:データベースに接続できませんでしたpostgres:致命的:ロール「tom」が存在しません


92

初めてPostgresをセットアップしようとしていますが、データベースの読み取りと作成の権限を持つユーザーを作成する必要があります。ただし、使用する場合:

createuser username

ターミナルで次のメッセージが表示されます。

createuser:データベースに接続できませんでしたpostgres:致命的:ロール "tom"が存在しません

トムは私が今ログインしているUbuntuユーザーアカウントです。「postgres」というユーザー名を作成しようとしています。psql -U psql template1データベースを作成して、Railsアプリの所有者をデータベースに割り当てることができます。


本当に「postgres」ユーザーを作成しようとしていますか?それとも、Railsアプリのユーザーだけですか?通常、「postgres」ユーザーはすでに存在し、問題は必要なことを行うためにそれに接続することです。
ostergaard

回答:


132

あなたはUbuntuについて言及したので、aptを介してUbuntuからPostgreSQLパッケージをインストールしたと思います。

その場合、postgresPostgreSQLユーザーアカウントはすでに存在し、のpeerunixソケットの認証を介してアクセスできるように構成されていpg_hba.confます。postgresUNIXユーザーとしてコマンドを実行することでアクセスできます。例:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

これはすべて、「UbuntuPostgreSQL」の最初のGoogleヒットであるUbuntuPostgreSQLドキュメントにあり、多数のStackOverflowの質問でカバーされています。

(使用しているOSとバージョン、PostgreSQLのインストール方法などの詳細を省略することで、この質問に答えるのが非常に難しくなりました。)


owning_userを作成した後、このユーザーとどのように接続しますか?私が使用するデフォルトのユーザーを接続することを意味します、sudo -u postgres psqlpostgres。owning_userを接続するのと同じ方法ですか?
ジョニー2014

2
3つのオプション。(a)そのユーザーのパスワードを設定し、そのユーザーの認証pg_hba.confを使用するように編集しmd5ます(マニュアルを参照)。(b)同じ名前でOSユーザーを作成し、引き続きpeerauthを使用します。または(c)より高度な場合pg_ident.confは、OSユーザーが新しいユーザーとしてログインできるようにマッピングを作成します。
クレイグリンガー

66

こちらの手順でgitgistを参照してください

これを実行します:

 sudo -u postgres psql

または

psql -U postgres

あなたのターミナルでpostgresに入るために

注意:Macを使用していて、上記の両方のコマンドが失敗した場合は、以下のMacに関するセクションにジャンプしてください。

postgres=#

実行

CREATE USER new_username;

注:new_usernameを、作成するユーザーに置き換えます。この場合は、tomになります。

postgres=# CREATE USER new_username;
CREATE ROLE

そのユーザーがDBを作成できるようにするため、ロールをスーパーユーザーに変更する必要があります

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

確認するために、すべてが成功しました、

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

更新/変更(Macの場合):

最近、Macで同様のエラーが発生しました。

psql: FATAL: role "postgres" does not exist

これは、私のインストールが、ロール名がログイン(短い)名と同じデータベーススーパーユーザーでセットアップされたためです。

ただし、一部のLinuxスクリプトは、スーパーユーザーの従来のロール名が postgres

どうすればこれを解決できましたか?

homebrewrunでインストールした場合:

/usr/local/opt/postgres/bin/createuser -s postgres

特定のバージョンのpostgresを使用している場合は、次のように言って10.5実行します。

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

または:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

または:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

postgres.appMac用にインストールした場合:

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

PS:10.5をPostgreSQLバージョンに置き換えます


これはpostgresに入るのにpsql -U postgres
役立ちました

29
sudo -u postgres createuser -s tom 

管理者がPostgreSQLユーザーアカウントを作成していない場合に発生するため、これは役に立ちます。オペレーティングシステムのユーザー名とは異なるPostgreSQLユーザー名が割り当てられている可能性もあります。その場合は、-Uスイッチを使用する必要があります。


7

1-デフォルトのPostgreSQLユーザーとしてログイン(postgres)

sudo -u postgres -i

2-postgresユーザーとして。createuserコマンドを使用して新しいデータベースユーザーを追加します

[postgres]$ createuser --interactive

3-出口

[postgres]$ exit

5

エラーは公式ドキュメントに掲載されています。この記事読むことができます

その記事からあなたの理由をコピーしました(そしてURLをハイパーリンクしました):

これは、管理者がPostgreSQLユーザーアカウントを作成していない場合に発生します。(PostgreSQLユーザーアカウントはオペレーティングシステムのユーザーアカウントとは異なります。)管理者の場合は、アカウントの作成について第20章を参照してください。最初のユーザーアカウントを作成するには、PostgreSQLがインストールされているオペレーティングシステムユーザー(通常はpostgres)になる必要があります。オペレーティングシステムのユーザー名とは異なるPostgreSQLユーザー名が割り当てられている可能性もあります。その場合は、-Uスイッチを使用するか、PGUSER環境変数を設定してPostgreSQLユーザー名を指定する必要があります。

あなたの目的のために、あなたはすることができます:

1)PostgreSQLユーザーアカウントを作成します。

sudo -u postgres createuser tom -d -P

-Pパスワードを設定する-dオプション。ユーザー名「tom」のデータベースの作成を許可するオプション。「tom」はオペレーティングシステムのユーザー名であることに注意してください。これにより、sudoingなしでPostgreSQLコマンドを実行できます。)

2)これでcreatedb、その他のPostgreSQLコマンドを実行できるようになります。


1

私は同じ問題を抱えていました、私はこれをするだけです

sudo su-postgres

createuser odoo -U postgres -dRSP #P for password(odooまたはpostgresにアクセスを許可するユーザー名



0

認証方法(ident)を変更したくない場合は、pg_hba.confを使用してください。

デフォルトユーザーとして最初にログインする

 sudo su - posgres

次に、psqlにアクセスし、ログインしているユーザーと同じ名前のユーザーを作成します

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

対応する役割を持つユーザーを次のように確認できます

postgres=#  \du

これに続いて、データベースを作成し、それを検証することができます

psql -d dbName
\l
\q

-4

最初にinitdbを実行する必要があります。データベースクラスターと初期設定を作成します

postgresqlを初めて設定する方法を参照してくださいおよびhttp://www.postgresql.org/docs/8.4/static/app-initdb.html


5
これは完全に間違っています。ユーザーが実行しinitdbていなかった場合、報告されたエラーメッセージを生成するために、データベースサーバーが実行され、接続を受け入れていませんでした。この誤解を招く答えを削除してください。(ところで、将来的には、古いリンクが蓄積しないように/ docs / current / static /にリンクしてください)
Craig Ringer 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.