PostgreSQLインストールメモ その2 ~CentOS編①~
PostgreSQLインストール備忘録。今度は仮想環境(VirtualBox)上のCentOS8マシンを対象とした。ネットワーク設定はブリッジアダプターなのでホストOSと同一ネットワークに存在する想定となる。
Windows版でバージョン13をインストールしたため、何となくそれに合わせてここでもバージョン13をインストール。
参考記事
PostgreSQL 13のインストール (CentOS 8編)
CentOs8にPostgreSQL 13をインストールする
PostgreSQL を CentOS にインストールするには
【初心者向け】サーバに構築したPostgreSQLをWindowsからツールで使えるようになるまでを一から説明します。
インストール
PostgreSQLの公式サイトからyumリポジトリを取得する。
上記URLにアクセスし、OSおよびディストリビューションを選択するとダウンロードページに遷移する(ちなみにWindowsを選択すると結局EDB社のページに飛ばされた)。
対象ディストリビューションのyumリポジトリダウンロードページで以下
・バージョン:13
・プラットフォーム:Red Hat Enterprise, Rocky, or Oracle version 8
・アーキテクチャ:X86_64
と指定してやるとインストールに必要なコマンドを出力してくれた。
めちゃくちゃ親切だな!!!!!!
↓こんな感じ。
よくわからんけど実行(後でまとめるかもしれない)。
# Install the repository RPM:
# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
よくわからんけど実行(後でまとめるかもしれない)。
# Disable the built-in PostgreSQL module:
# dnf -qy module disable postgresql
よくわからんけど実行(後でまとめるかもしれない)。
とりあえずここまででPostgreSQLのインストールは完了した。
# Install PostgreSQL:
# dnf install -y postgresql13-server
初期化コマンドが用意されているようなので実行する。設定ファイルが生成される。
# Optionally initialize the database and enable automatic start:
# /usr/pgsql-13/bin/postgresql-13-setup initdb
# 生成された設定ファイル確認
# ls /var/lib/pgsql/13/data/
>
PG_VERSION log pg_ident.conf pg_replslot pg_stat_tmp pg_wal postmaster.opts
base pg_commit_ts pg_logical pg_serial pg_subtrans pg_xact postmaster.pid
current_logfiles pg_dynshmem pg_multixact pg_snapshots pg_tblspc postgresql.auto.conf
global pg_hba.conf pg_notify pg_stat pg_twophase postgresql.conf
マシンが起動した際にサービスが自動で起動するように設定を行う。
# systemctl enable postgresql-13
パスワード設定
PostgreSQLのインストールを実施した時点でOSユーザ「postgres」が作成されるのだが、パスワードが未設定であるためログインするにはrootユーザからsuコマンドを叩くしかない。
したがってまずこのOSユーザに対してパスワードを設定しておく。
# ユーザ「postgres」が存在することの確認
$ cat /etc/passwd | grep postgres
>postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
下記コマンドを実行してパスワード変更。パスワードは例の如く適当(パスワードの内容への怒られが発生したけどまあええやろ)。
OS上のユーザ名:postgres
パスワード:postgres
# passwd postgres
>ユーザー postgres のパスワードを変更。
>新しいパスワード:
>よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。
>新しいパスワードを再入力してください:
>passwd: すべての認証トークンが正しく更新できました。
次はPostgreSQLのスーパーユーザ「postgres」のパスワード設定を行う。
まずPostgreSQLを起動する。
# systemctl start postgresql-13.service
何も出力されなければ起動成功らしいが、下記コマンドでサービスの状態を確認しておく。「Active: active (running)」となっており起動中であることが分かる。
# systemctl status postgresql-13.service
>
● postgresql-13.service - PostgreSQL 13 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-01-22 16:32:28 JST; 1min 8s ago
Docs: https://www.postgresql.org/docs/13/static/
Process: 9469 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 9474 (postmaster)
Tasks: 8 (limit: 23546)
Memory: 16.8M
CGroup: /system.slice/postgresql-13.service
tq9474 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
tq9476 postgres: logger
tq9478 postgres: checkpointer
tq9479 postgres: background writer
tq9480 postgres: walwriter
tq9481 postgres: autovacuum launcher
tq9482 postgres: stats collector
mq9483 postgres: logical replication launcher
ここからパスワード設定の手順に入る。
OSのユーザーをroot→postgresに変更し、
# su - postgres
psqlを起動してから、psqlコマンドラインで
「alter role postgres with password 'postgres';」
を実行すれば
スーパーユーザのパスワード:postgres
と設定される。
$ psql
>psql (13.5)
>"help"でヘルプを表示します。
>postgres=# alter role postgres with password 'postgres';
>ALTER ROLE
>postgres=# \q
最後に再起動して設定を反映させておく。
# systemctl restart postgresql-13.service
以上で2つの「postgres」ユーザに対するパスワード設定が完了した。
追記(これも設定した方がいい気がする)
psqlコマンドはオプション無しで実行すると以下が設定される。
・ホスト名:localhost
・ポート番号:5432
・ロール名:OSのユーザ名
・データベース名:ロール名と同じデータベース名
先述のpsql実行はOSユーザを「postgres」に切り替えて行ったため、ロール「postgres」でログインすることになった。
ではここで別のロールでのログインはどうだろうか?
まずOSユーザ「postgres」でOSにログインした状態で同じデータベース内にロール「testROLE01」を作る。
$ psql -U postgres -d postgres
>psql (13.5)
>"help"でヘルプを表示します。
postgres=# CREATE USER testROLE01 WITH PASSWORD 'testROLE01';
>CREATE ROLE
postgres=# \q
次に新たに作成したロールでログインを試みる際には本当はパスワード要求をして貰いたいのだが、「psql: エラー: FATAL: ユーザ"testrole01"で対向(peer)認証に失敗しました」というエラーが吐き出されてしまった。
$ psql -U testrole01 -d postgres
psql: エラー: FATAL: ユーザ"testrole01"で対向(peer)認証に失敗しました
pg_hba.conf編集
原因は上記ファイルのローカルホストからの接続を制御する行がデフォルトで以下のようになっていることらしい(pg_hba.confの役割については PostgreSQLインストールメモ その3 ~CentOS編②~ で述べるためここでは割愛する)。
# "local" is for Unix domain socket connections only
local all all peer
最後の区分で認証方式がPeerに設定されている。Peer認証とはPostgreSQLのユーザーとOSユーザが一致している時にログインを許可するような仕組みのことで、今回でいえばOSユーザ「postgres」と接続要求したPostgreSQLのユーザー「testROLE01」が異なるためエラーになってしまった、ということらしい。
peer認証方式はカーネルからクライアント上のオペレーティングシステムのユーザ名を取得し、 それをデータベースユーザ名(オプションのユーザ名マップとともに)として使用することにより動作します。この方法はローカル接続でのみ使用可能です。
https://www.postgresql.jp/docs/11/auth-peer.html
あんまり嬉しくない設定かなあと思うので認証方式をmd5に変更しておく。
# "local" is for Unix domain socket connections only
local all all md5
再起動後「testROLE01」での接続を試みたところ今度は上手くいった。
# systemctl restart postgresql-13.service
# su - postgres
$ psql -U testrole01 -d postgres
>ユーザ testrole01 のパスワード:
>psql (13.5)
>"help"でヘルプを表示します。
>postgres=>
この記事が気に入ったらサポートをしてみませんか?