質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

1962閲覧

書籍:PostgreSQL徹底入門 createuserコマンドでユーザを作成しようとするとエラー

dobel-dog

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

1クリップ

投稿2021/12/21 07:03

前提・実現したいこと

OSS-DBの資格取得に向けてPostgreSQLの勉強を始めたのですが、その際に購入した書籍でPostgreSQLのデータベースクラスタを作成し、サーバーを起動、停止のところまでいけたのですがすべての権限を持たないユーザーの作成というところでつまずいています。
全ての権限を持たないユーザーの作成中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

createuser: エラー: "localhost" (::1)、ポート 5432でのサーバーへの接続に失敗しました: FATAL: password authentication failed for user "tanig"

該当のソースコード

pg_ctl start 完了 サーバー起動完了 createuser --interactive testuser 新しいロールをスーパーユーザーにしますか? (y/n)n 新しいロールに対してデータベースを作成する権限を与えますか? (y/n)n 新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n パスワード: パスワード: createuser: エラー: "localhost" (::1)、ポート 5432でのサーバーへの接続に失敗しました: FATAL: password authentication failed for user "name"

試したこと

pg_ctl startでサーバーは起動できています。 pg_ctl stopでサーバーの停止も問題なくできます。 psql -U postgresとすると psql (14.1) postgres=# \du ロール名 | 属性 | 所属グループ ----------+------------------------------------------------------------------------------+-------------- postgres | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

補足情報(FW/ツールのバージョンなど)

postgresSQL14.1
データベースクラスタは、

initdb -E UTF8 --no-local -U postgres -D /usr/local/pgsql/14/data

というふうに作成しました。
作成した後は、

成功しました。以下のようにしてデータベースサーバーを起動することができます。 pg_ctl -D /usr/local/pgsql/14/data -l ログファイル start

というメッセージが表示されました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/12/21 07:42

DB導入したOSは何でしょうか。
dobel-dog

2021/12/21 07:45

修正依頼ありがとうございます。 Windws11 proです。
m.ts10806

2021/12/21 07:48

ん、ということは、Windows内に /usr/local/pgsql/14/data のようなディレクトリを作っているということですか? 各コマンドがそのまま実行しているということは、パスもきちんと通して?
dobel-dog

2021/12/21 07:52

はい。ディレクトリを作成しPATHも通しています。
hoshi-takanori

2021/12/21 10:13

Windows よく分かりません (WSL とかお使いでしょうか?) が、psql -U postgres できるなら createuser -U postgres --interactive testuser でいけるのでは…。
退会済みユーザー

退会済みユーザー

2021/12/22 01:46

Windows 11ならWSL2+Ubuntu-20.04など導入した上でトレーニングした方が、Windows固有の事象に悩まされずに済みそうですが。Windows 11へのサインインしているユーザーは、Administrator権限持ちユーザーでしょうか。
dobel-dog

2021/12/22 06:13

hoshi-takanoriさん返信遅くなり申し訳ないです。教えていただいたコマンドを入力すると成功しました。 ありがとうございます。WSLというのを調べたのですがまだ、導入していなかったので調べてから導入してみようと思います!
dobel-dog

2021/12/22 06:16

php-gresさん返信遅くなり申し訳ないです。windows11にサインインしているユーザーにはAdministrator権限がついていました。WSL2+ubuntuもまだよくわかってないのですが調べながら導入していこうと思います。
退会済みユーザー

退会済みユーザー

2021/12/22 09:43 編集

WSLはWindows Subsystem for Linuxのことで、Windows上でLinuxを動かすための仕組みです。UbuntuはLinuxにおけるひとつのディストリビューションです。 Windowsそのものでは /usr/local/pgsql/14/data ではなく、12の例だと「C:\Program Files\PostgreSQL\12\data」だったりします。14の例はわかりません。 ディレクトリの区切り文字が違う以外にもいろいろな差があるため、テキスト通りにならないかもしれません。 ちなみに、Ubuntu-20.04上のPostgreSQL 12でのデータディレクトリは、/var/lib/postgresql/12/main/ だったりします。(環境変数で変更したりできますが。)
guest

回答1

0

自己解決

質問の解決方法として、createuser -U postgres --interactive testuser とコマンドを打つことで解決いたしました。回答してくださった皆様ありがとうございました。
自分なりに調べた結果、-U postgresでスーパーユーザを指定しないとwindows11にサインインしているユーザではpostgresのロールにアクセスする権限をつけていないので今回エラーが出ました。

initdb -E UTF8 --no-local -U postgres -D /usr/local/pgsql/14/data

データベースクラスタを作成する際↑-Uの後のpostgresがスーパーユーザーと指定しているので
-U スーパーユーザーとしないとエラーが出てしまうことが分かりました。-Uオプションをこの時、省略すると実行ユーザーと同じ名前のスーパーユーザーが自動的に指定される仕組みだと知りました。
-Eオプションはデフォルトの文字コードの指定、-Uオプションはスーパーユーザーの指定、-Dオプションはデータベースクラスタを作成する場所の指定、それぞれのオプションの意味を理解しながら読み解くことが大切だと痛感しました。
改めまして、回答してくださった皆様ありがとうございました。

投稿2021/12/22 08:34

dobel-dog

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問