web-dev-qa-db-ja.com

createdb:データベースの作成に失敗しました:エラー:データベースを作成する権限が拒否されました

root usersuper userserおよびpermissions!についてかなり混乱しています!ユーザー「athleticu」内にデータベースを作成できません。以下は私が使用したコマンドです:-

athleticu@ip-172-30-4-103:/home/ubuntu$ createdb -T template0 simple_db1
createdb: database creation failed: ERROR:  permission denied to create database
athleticu@ip-172-30-4-103:/home/ubuntu$ Sudo createdb -T template0 simple_db1
Sudo: unable to resolve Host ip-172-30-4-103
createdb: could not connect to database template1: FATAL:  role "root" does not exist

誰かが私の疑問を明確にして、何を書くべきか教えてください!

13
SonamGupta

ちょっと私はすでにこれを解決しました。次のように、最初にpostgresユーザーとしてログインする必要があります。

$ su postgres

$ psql

postgres=# alter user athleticu createdb;
ALTER ROLE

それがあなたを助けることを願っています:)

38
SonamGupta

タイプ\duをpsqlに入力すると、すべての登録済みユーザーと各ユーザーが持つ特権のタイプのリストが表示されます。ログインしているユーザー(例: 'user1')に特権を付与するには、次のコマンドを使用して、そのリストのスーパーユーザーロールの1つ(例: 'user2')を使用してサインアウトしてログインする必要がありました。

    psql -U 'user2' -h localhost 'database2'

ここで、「database2」は、特定のスーパーユーザー「user2」が特権を持っているものの名​​前です。スーパーユーザーとしてログインしたら、次の方法で「user1」に権限を付与できます。

    ALTER ROLE user1 WITH CREATEDB 

または

    ALTER ROLE user1 WITH SUPERUSER

次に、user1として再びサインインします。user1はスーパーユーザーになりました。

これ blog はこの link と同様に役に立ちました。

17
polyccon

rootユーザーは、Postgresから独立したシステム上のアカウントです。 rootユーザーは1人だけです。

スーパーユーザーは、すべてにアクセスできるPostgresのアカウントです。多くのスーパーユーザーが存在する場合があります。

システムアカウントとPostgresアカウントは異なりますが、データベースへの接続時にPostgresユーザー名を指定しない限り(psqlcreatedbdropdbなどのユーティリティを使用) 、同じ名前の対応するPostgresアカウントがあることを期待して、現在のシステムユーザーの名前を使用します。 root userは、デフォルトでは、Postgresに対応するアカウントを持ちません。

* nixにPostgresをインストールすると、postgresという名前のsuperuserpostgresという名前のシステムユーザーの両方が作成されます。

したがって、Postgresを組み込みのスーパーユーザーとして使用する必要がある場合、2つのオプションがあります。

  1. Sudo su - postgrespostgresシステムユーザーになり、コマンド(createdbpsqlなど)を実行できます。システムユーザーはデータベースのスーパーユーザーと同じ名前を持っているため、コマンドは適切なアカウントとして接続します。
  2. -Uスイッチのように、実行するユーザー名を指定できます(例:psql -U postgres ...)。

Postgresサーバーの認証設定に応じて、どちらかまたは両方の接続方法でパスワードを入力する必要があります。

6
dmfay

PostgreSQLを新規インストールしたときにできることは、いくつかの権限を持つユーザーを作成することです( createuser documentation を参照)。

my-user> Sudo su - postgres -c "createuser <my-user> --createdb"

これにより、my-user次のようにDBを作成します。

my-user> createdb <my-db>

my-userを使用するだけで何でもできるようにするには--superuserフラグの代わりに:

my-user> Sudo su - postgres -c "createuser <my-user> --superuser"
1
nyxz