このエントリーをはてなブックマークに追加

目次

概要

 PostgreSQL 12をCentOS 7.8へインストールした時の手順です。 前回インストール手順を掲載したときはバージョン10.4でしたが、その時から本質的には手順は変わりません。 ただ前回はパッケージファイルをサーバにダウンロードしてからrpmコマンドでインストールしましたが、 今回はPostgreSQLのYUMリポジトリを登録して、yumコマンドでインストールする形に変えました。

構成

利用環境

 サーバ環境はVMware vSphere Hypervisorの仮想マシンを利用しました。 仮想マシンのスペックは以下のとおりです。

■仮想マシンスペック
項目内容
ハイパーバイザVMware vSphere Hypervisor 7.0.0 (Build 15843807)
仮想マシンESXi 7.0 仮想マシン
CPU2 vCPUs
メモリ2 GB
ハードディスク180 GB
SCSI アダプタLSI Logic SAS

 ディレクトリ構成は任意ですが、今回は以下の通りとします。 ご自身の環境に読み替えて構築してください。

カレントデータ/data/
バックアップデータ/bkup/
データベースクラスタ/data/pgdata1/
WALファイル/data/pgdata1/pg_wal/
アーカイブファイル/bkup/pgdata1/pg_arch/

サーバ構成

OSバージョン

CentOS Linux release 7.8.2003 (Core)

ソフトウェア・パッケージ一覧

  • pgdg-redhat-repo-latest.noarch.rpm
  • postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
  • postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
  • postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm

環境構築

インストール

YUMリポジトリのインストール

 PostgreSQLの公式サイトで配布されているCentOS 7用の(=RHEL 7用の)YUMリポジトリを登録するためのパッケージをインストールします。

# yum -y localinstall https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
読み込んだプラグイン:fastestmirror, langpacks
pgdg-redhat-repo-latest.noarch.rpm                                                               | 6.7 kB  00:00:00
/var/tmp/yum-root-33m8TX/pgdg-redhat-repo-latest.noarch.rpm を調べています: pgdg-redhat-repo-42.0-13.noarch
/var/tmp/yum-root-33m8TX/pgdg-redhat-repo-latest.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ pgdg-redhat-repo.noarch 0:42.0-13 を インストール
--> 依存性解決を終了しました。
base/7/x86_64                                                                                    | 3.6 kB  00:00:00
base/7/x86_64/group_gz                                                                           | 153 kB  00:00:00
base/7/x86_64/primary_db                                                                         | 6.1 MB  00:00:00
extras/7/x86_64                                                                                  | 2.9 kB  00:00:00
extras/7/x86_64/primary_db                                                                       | 206 kB  00:00:00
updates/7/x86_64                                                                                 | 2.9 kB  00:00:00
updates/7/x86_64/primary_db                                                                      | 4.5 MB  00:00:00

依存性を解決しました

========================================================================================================================
 Package                      アーキテクチャー   バージョン           リポジトリー                                 容量
========================================================================================================================
インストール中:
 pgdg-redhat-repo             noarch             42.0-13              /pgdg-redhat-repo-latest.noarch              11 k

トランザクションの要約
========================================================================================================================
インストール  1 パッケージ

合計容量: 11 k
インストール容量: 11 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : pgdg-redhat-repo-42.0-13.noarch                                                         1/1
  検証中                  : pgdg-redhat-repo-42.0-13.noarch                                                         1/1

インストール:
  pgdg-redhat-repo.noarch 0:42.0-13

完了しました!
# ls -l /etc/yum.repos.d/
合計 48
-rw-r--r--. 1 root root 1664  4月  8 07:01 CentOS-Base.repo
-rw-r--r--. 1 root root 1309  4月  8 07:01 CentOS-CR.repo
-rw-r--r--. 1 root root  649  4月  8 07:01 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630  4月  8 07:01 CentOS-Media.repo
-rw-r--r--. 1 root root 1331  4月  8 07:01 CentOS-Sources.repo
-rw-r--r--. 1 root root 7577  4月  8 07:01 CentOS-Vault.repo
-rw-r--r--. 1 root root  314  4月  8 07:01 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  616  4月  8 07:01 CentOS-x86_64-kernel.repo
-rw-r--r--  1 root root 9381  9月 17 21:55 pgdg-redhat-all.repo ←インストールされた

PostgreSQL 12のインストール

 登録したYUMリポジトリを元にPostgreSQL 12の最新版をインストールします。 2020年9月20日時点ではバージョン12.4がインストールされました。

# yum -y install postgresql12-server
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
pgdg-common                                                                                      | 2.9 kB  00:00:00
pgdg10                                                                                           | 3.6 kB  00:00:00
pgdg11                                                                                           | 3.6 kB  00:00:00
pgdg12                                                                                           | 3.6 kB  00:00:00
pgdg13                                                                                           | 3.6 kB  00:00:00
pgdg95                                                                                           | 3.6 kB  00:00:00
pgdg96                                                                                           | 3.6 kB  00:00:00
(1/13): pgdg10/7/x86_64/group_gz                                                                 |  245 B  00:00:00
(2/13): pgdg12/7/x86_64/group_gz                                                                 |  245 B  00:00:00
(3/13): pgdg11/7/x86_64/group_gz                                                                 |  245 B  00:00:00
(4/13): pgdg13/7/x86_64/group_gz                                                                 |  246 B  00:00:00
(5/13): pgdg12/7/x86_64/primary_db                                                               | 124 kB  00:00:00
(6/13): pgdg13/7/x86_64/primary_db                                                               |  17 kB  00:00:00
(7/13): pgdg95/7/x86_64/group_gz                                                                 |  249 B  00:00:00
(8/13): pgdg96/7/x86_64/group_gz                                                                 |  249 B  00:00:00
(9/13): pgdg-common/7/x86_64/primary_db                                                          | 134 kB  00:00:01
(10/13): pgdg96/7/x86_64/primary_db                                                              | 240 kB  00:00:00
(11/13): pgdg11/7/x86_64/primary_db                                                              | 255 kB  00:00:02
(12/13): pgdg95/7/x86_64/primary_db                                                              | 218 kB  00:00:00
(13/13): pgdg10/7/x86_64/primary_db                                                              | 253 kB  00:00:05
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ postgresql12-server.x86_64 0:12.4-1PGDG.rhel7 を インストール
--> 依存性の処理をしています: postgresql12-libs(x86-64) = 12.4-1PGDG.rhel7 のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64
--> 依存性の処理をしています: postgresql12(x86-64) = 12.4-1PGDG.rhel7 のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64
--> 依存性の処理をしています: libpq.so.5()(64bit) のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ postgresql12.x86_64 0:12.4-1PGDG.rhel7 を インストール
---> パッケージ postgresql12-libs.x86_64 0:12.4-1PGDG.rhel7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 Package                            アーキテクチャー      バージョン                        リポジトリー           容量
========================================================================================================================
インストール中:
 postgresql12-server                x86_64                12.4-1PGDG.rhel7                  pgdg12                5.1 M
依存性関連でのインストールをします:
 postgresql12                       x86_64                12.4-1PGDG.rhel7                  pgdg12                1.6 M
 postgresql12-libs                  x86_64                12.4-1PGDG.rhel7                  pgdg12                370 k

トランザクションの要約
========================================================================================================================
インストール  1 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 7.0 M
インストール容量: 30 M
Downloading packages:
警告: /var/cache/yum/x86_64/7/pgdg12/packages/postgresql12-12.4-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY
postgresql12-12.4-1PGDG.rhel7.x86_64.rpm の公開鍵がインストールされていません
(1/3): postgresql12-12.4-1PGDG.rhel7.x86_64.rpm                                                  | 1.6 MB  00:00:01
(2/3): postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm                                           | 5.1 MB  00:00:00
(3/3): postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm                                             | 370 kB  00:00:05
------------------------------------------------------------------------------------------------------------------------
合計                                                                                    1.3 MB/s | 7.0 MB  00:00:05
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG から鍵を取得中です。
Importing GPG key 0x442DF0F8:
 Userid     : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>"
 Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
 Package    : pgdg-redhat-repo-42.0-13.noarch (@/pgdg-redhat-repo-latest.noarch)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : postgresql12-libs-12.4-1PGDG.rhel7.x86_64                                               1/3
  インストール中          : postgresql12-12.4-1PGDG.rhel7.x86_64                                                    2/3
  インストール中          : postgresql12-server-12.4-1PGDG.rhel7.x86_64                                             3/3
  検証中                  : postgresql12-server-12.4-1PGDG.rhel7.x86_64                                             1/3
  検証中                  : postgresql12-12.4-1PGDG.rhel7.x86_64                                                    2/3
  検証中                  : postgresql12-libs-12.4-1PGDG.rhel7.x86_64                                               3/3

インストール:
  postgresql12-server.x86_64 0:12.4-1PGDG.rhel7

依存性関連をインストールしました:
  postgresql12.x86_64 0:12.4-1PGDG.rhel7                   postgresql12-libs.x86_64 0:12.4-1PGDG.rhel7

完了しました!

設定

OSユーザ(postgres)のパスワード変更

 PostgreSQLのパッケージをインストールすると、postgres という名前のユーザがLinux上に自動で作成されます。 作成直後はパスワードが設定されていないため、設定します。

# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード: ←パスワードを入力(表示されません)
新しいパスワードを再入力してください: ←上と同じパスワードを入力(表示されません)
passwd: すべての認証トークンが正しく更新できました。

OSユーザ(postgres)の環境変数設定

 postgresユーザの環境変数としてデータベースクラスタとPostgreSQLのコマンドへのパスを設定します。

# grep postgres /etc/passwd ←postgresユーザのホームディレクトリを確認
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
# cd /var/lib/pgsql/
# vi .bash_profile
ファイル名:/var/lib/pgsql/.bash_profile
※以下、該当箇所のみ変更※
PGDATA=/var/lib/pgsql/12/data
export PGDATA
   ↓変更
PGDATA=/data/pgdata1
export PGDATA
export PATH=$PATH:/usr/pgsql-12/bin

データベースクラスタ用ディレクトリ($PGDATA)作成

 インストールしたRPMパッケージで初期設定されているデータベースクラスタは /var/lib/pgsql/12/data/ となっています。 このままでも良いのですが、ディレクトリ階層が深くて分かりづらいため /data/pgdata1/ に変更します。 また、アーカイブファイルの格納先は /bkup/pgdata1/pg_arch/ とします。 その他、データベースクラスタのベースバックアップの取得先は /bkup/ ディレクトリを想定しています(この手順では触れません)。

 データベースクラスタのベースバックアップと最新のWALファイル、アーカイブファイルはPITRに必要なファイルなので、 冗長化を高めたディスクに保管した方が良いですが、今回は物理障害ではなく、論理障害(人為的操作ミス)からの 復旧に限定した構成としているため、データベースクラスタと同じディスク上に保存しています。

 それぞれディレクトリを作成して必要なパーミッションを設定します。 データベースクラスタ用のディレクトリはPostgreSQL管理者ユーザの postgres のみが参照、更新できるようにします。

# cd /
# mkdir -m 777 data ←カレントデータ用
# mkdir -m 777 bkup ←バックアップ・アーカイブデータ用
# su - postgres
-bash-4.2$ cd /data/
-bash-4.2$ mkdir -m 700 pgdata1 ←データベースクラスタ用
-bash-4.2$ ls -l
合計 0
drwx------ 2 postgres postgres 6  9月 20 03:57 pgdata1
-bash-4.2$ cd /bkup/
-bash-4.2$ mkdir -m 700 pgdata1
-bash-4.2$ ls -l
合計 0
drwx------ 2 postgres postgres 6  9月 20 03:58 pgdata1
-bash-4.2$ cd pgdata1/
-bash-4.2$ mkdir -m 700 pg_arch ←アーカイブファイル用
-bash-4.2$ ls -l
合計 0
drwx------ 2 postgres postgres 6  9月 20 03:58 pg_arch

データベースクラスタ作成

 前の手順で作成したデータベースクラスタ用ディレクトリ内にデータベースクラスタを作成します。 initdbコマンドを使用しますが、必ず管理者ユーザであるpostgresユーザで実行してください。 エンコーディングは UTF8、ロケールは設定しません。 PostgreSQLでロケールを選択した場合、検索性能に問題が出るらしく、 ロケールを選択しないことが推奨とされています。(12でも該当するかは未確認です)

-bash-4.2$ initdb --encoding=UTF8 --no-locale --pgdata=/data/pgdata1
データベースシステム内のファイルの所有者はユーザ"postgres"となります。
このユーザをサーバプロセスの所有者とする必要があります。

データベースクラスタはロケール"C"で初期化されます。
デフォルトのテキスト検索構成は english に設定されます。

データベージのチェックサムは無効です。

ディレクトリ/data/pgdata1の権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

initdb: 警告: ローカル接続に対して"trust"認証を有効にします
pg_hba.confを編集する、もしくは、次回initdbを実行する時に -A オプション、
あるいは --auth-local および --auth-host オプションを使用することで変更する
ことがきます。

成功しました。以下のようにしてデータベースサーバを起動することができます:

    pg_ctl -D /data/pgdata1 -l ログファイル start

-bash-4.2$

PostgreSQLの初期設定

 ここではPostgreSQLインスタンスがリッスンするIPアドレスと ログ出力、WALファイルのアーカイブに関する設定を行います。

 初期設定ではPostgreSQLが localhost(127.0.0.1)のみでリッスンする設定になっています。 そのため、他のサーバからTCP/IP接続することができません。 ローカルからもリモートからもTCP/IP接続できるように、 このサーバが持つ全てのIPアドレスでリッスンする設定とします(全てと言っても今回の構成ではNICは1つですが)。

 ログの出力先は /data/pgdata1/log/ ディレクトリとします。 ログファイル名は postgresql-20200920.log のように ログファイルが作成された年月日を付与します。 ログファイルは7日間経過後に自動でローテーションされ、 新しいログファイルに出力が切り替わるようにします。 ログが一定のファイルサイズに達した際にローテーションされる機能は使用しません。 あくまで日数経過後にローテーションします。 ログメッセージの形式は以下のようになります。

【ログメッセージの出力例】
2020-09-20 04:29:12.013 JST [2449] LOG: database system was shut down at 2020-09-20 03:59:12 JST 2020-09-20 04:29:12.016 JST [2445] LOG: database system is ready to accept connections

 WALファイルは初期設定ではアーカイブする設定になっていないため、 WALファイルが循環すると古いファイルから削除されてしまいます。 PITRではベースバックアップからの一連の更新ログが必要となるため、 WALファイルをアーカイブする設定に変更します。 また、データベースクラスタのベースバックアップ(pg_basebackup)を取得する際に レプリケーションプロトコルが利用される仕様となっているため、 一部レプリケーションに関する設定も行います。

 データベースクラスタ内の postgresql.conf ファイルを編集します。

-bash-4.2$ cd /data/pgdata1/
-bash-4.2$ vi postgresql.conf
ファイル名:/data/pgdata1/postgresql.conf
※以下、該当箇所のみ変更※
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
   ↓変更
listen_addresses = '*'                  # what IP address(es) to listen on;

#------------------------------------------------------------------------------
# WRITE-AHEAD LOG
#------------------------------------------------------------------------------
#wal_level = replica                    # minimal, replica, or logical
   ↓変更
wal_level = replica                     # minimal, replica, or logical

#archive_mode = off             # enables archiving; off, on, or always
   ↓変更
archive_mode = on               # enables archiving; off, on, or always

#archive_command = ''           # command to use to archive a logfile segment
   ↓変更
archive_command = 'cp %p /bkup/pgdata1/pg_arch/%f'              # command to use to archive a logfile segment

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------
#max_wal_senders = 10           # max number of walsender processes
   ↓変更
max_wal_senders = 2             # max number of walsender processes

#------------------------------------------------------------------------------
# REPORTING AND LOGGING
#------------------------------------------------------------------------------
log_filename = 'postgresql-%a.log'      # log file name pattern,
   ↓変更
log_filename = 'postgresql-%Y%m%d.log'  # log file name pattern,

log_rotation_age = 1d                   # Automatic rotation of logfiles will
   ↓変更
log_rotation_age = 7d                   # Automatic rotation of logfiles will

クライアント認証の設定

 クライアントからPostgreSQLに接続する際の認証設定を行います。 デフォルトで設定されている内容は全てコメントアウトし、必要な設定をファイルの末尾に追加します。 設定する認証ルールは以下の通りとします。

  • postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 パスワードの入力を求めない。
  • postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)でレプリケーションが要求された場合、 パスワードの入力を求めない(replicationという名のデータベースは存在せず、特殊な操作を表す予約語)。
  • postgresユーザ(管理者ユーザ)以外のユーザ(一般ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 PostgreSQLユーザ名とパスワードで認証する。パスワードはscram-sha-256で暗号化して送信する。
  • ユーザに関係なくTCP/IP接続(リモート接続)を行った場合は、PostgreSQLユーザ名とパスワードで認証する。 システム開発者がpgAdmin4などを利用してインターネット経由で接続してくることを想定し、接続元IPアドレスが不定であることから、 任意のIPアドレス(0.0.0.0/0)からの接続を許可する。※LAN環境でのみ利用する場合はIPアドレスを限定してください。 パスワードはscram-sha-256で暗号化して送信する。

 PostgreSQLでデータベースクラスタのオンラインバックアップ(pg_basebackup)を実行する場合、 レプリケーションプロトコルを利用してバックアップが作成される仕様となっています。 そのため、上記2つ目のルールを記述しておく必要があることに注意してください。

-bash-4.2$ vi pg_hba.conf
ファイル名:/data/pgdata1/pg_hba.conf
※以下、該当箇所のみ変更※
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
   ↓変更
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     all                                     trust
#host    replication     all             127.0.0.1/32            trust
#host    replication     all             ::1/128                 trust
local   all             postgres                                peer
local   replication     postgres                                peer
local   all             all                                     scram-sha-256
host    all             all             0.0.0.0/0               scram-sha-256

Systemdの設定

 Systemdを利用してPostgreSQLの起動を管理する設定を行います。 PostgreSQL用のサービスユニットファイルをコピーして編集します。 データベースクラスタのディレクトリを初期設定から変更したので、ファイル内の環境変数 PGDATA を修正します。

-bash-4.2$ exit
ログアウト
# cp -piv /lib/systemd/system/postgresql-12.service /etc/systemd/system/postgresql-12.service
`/lib/systemd/system/postgresql-12.service' -> `/etc/systemd/system/postgresql-12.service'
# cd /etc/systemd/system/
# vi postgresql-12.service
ファイル名:/etc/systemd/system/postgresql-12.service
※以下、該当箇所のみ変更※
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/12/data/
   ↓変更
# Location of database directory
Environment=PGDATA=/data/pgdata1/

SystemdでPostgreSQLを自動起動に設定

 SystemdでPostgreSQLのサービスユニットが認識されていることを確認します。 インストール後はPostgreSQLは停止状態で、自動起動も無効になっています。 今回の手順でPostgreSQLをインストールした場合、 サービスユニット名は postgresql-12.service となっています。 OS起動時にSystemdがPostgreSQLを自動起動するように設定します。

# systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/etc/systemd/system/postgresql-12.service; disabled; vendor preset: disabled) ←自動起動無効
   Active: inactive (dead)
     Docs: https://www.postgresql.org/docs/12/static/
# systemctl enable postgresql-12.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /etc/systemd/system/postgresql-12.service.
# systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled) ←自動起動有効
   Active: inactive (dead) ←停止状態
     Docs: https://www.postgresql.org/docs/12/static/

SystemdでPostgreSQLの起動

 SystemdでPostgreSQLを起動します。

# systemctl start postgresql-12.service
# systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2020-09-20 04:29:12 JST; 2s ago ←起動状態
     Docs: https://www.postgresql.org/docs/12/static/
  Process: 2439 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 2445 (postmaster)
   CGroup: /system.slice/postgresql-12.service
           tq2445 /usr/pgsql-12/bin/postmaster -D /data/pgdata1/
           tq2448 postgres: logger
           tq2450 postgres: checkpointer
           tq2451 postgres: background writer
           tq2452 postgres: walwriter
           tq2453 postgres: autovacuum launcher
           tq2454 postgres: archiver
           tq2455 postgres: stats collector
           mq2456 postgres: logical replication launcher

 9月 20 04:29:11 centos78 systemd[1]: Starting PostgreSQL 12 database server...
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  starting PostgreSQL 12.4 o...4-bit
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on IPv4 address ... 5432
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on IPv6 address ... 5432
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on Unix socket "...5432"
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.003 JST [2445] LOG:  listening on Unix socket "...5432"
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] LOG:  redirecting log output to ...ocess
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] HINT:  Future log output will ap...log".
 9月 20 04:29:12 centos78 systemd[1]: Started PostgreSQL 12 database server.
Hint: Some lines were ellipsized, use -l to show in full.

データベースのスーパーユーザのパスワード設定

 データベースクラスタ作成時点では、スーパーユーザ(データベースユーザ) postgres のパスワードが設定されていません。 以下では postgres ユーザのパスワードを「Pass-123」に設定しますが、実際にはもっと推測されづらいものを採用してください。

# su - postgres
最終ログイン: 2020/09/20 (日) 03:57:31 JST日時 pts/0
-bash-4.2$ psql -c "alter role postgres with password 'Pass-123';"
ALTER ROLE
-bash-4.2$ exit
ログアウト

動作確認

プロセス起動確認

 PostgreSQLのプロセスが起動していることを確認します。 今回の設定ではマスタサーバプロセス1つとワーカプロセス8つが起動します。

# ps -ef | grep postgres | grep -v grep
                        ↓マスタサーバプロセス(1つ)
postgres  2445     1  0 04:29 ?        00:00:00 /usr/pgsql-12/bin/postmaster -D /data/pgdata1/
                        ↓ワーカプロセス(8つ)
postgres  2448  2445  0 04:29 ?        00:00:00 postgres: logger
postgres  2450  2445  0 04:29 ?        00:00:00 postgres: checkpointer
postgres  2451  2445  0 04:29 ?        00:00:00 postgres: background writer
postgres  2452  2445  0 04:29 ?        00:00:00 postgres: walwriter
postgres  2453  2445  0 04:29 ?        00:00:00 postgres: autovacuum launcher
postgres  2454  2445  0 04:29 ?        00:00:00 postgres: archiver
postgres  2455  2445  0 04:29 ?        00:00:00 postgres: stats collector
postgres  2456  2445  0 04:29 ?        00:00:00 postgres: logical replication launcher

ログ出力確認

 設定したログファイルにログが出力されていることを確認します。 ログメッセージの先頭に出力されている日付もJSTなので日本時間になっていることが分かります。

# cd /data/pgdata1/log/
# ls -l
合計 4
-rw------- 1 postgres postgres 186  9月 20 04:29 postgresql-20200920.log
# cat postgresql-20200920.log
2020-09-20 04:29:12.013 JST [2449] LOG:  database system was shut down at 2020-09-20 03:59:12 JST
2020-09-20 04:29:12.016 JST [2445] LOG:  database system is ready to accept connections

SQL実行確認

 psqlコマンドで、SQLを実行できることを確認します。

# su - postgres
最終ログイン: 2020/09/20 (日) 04:31:35 JST日時 pts/0
-bash-4.2$ psql
psql (12.4)
"help"でヘルプを表示します。

postgres=# select now();
             now
------------------------------
 2020-09-20 04:33:28.65803+09
(1 行)

postgres=# select oid, datname from pg_database;
  oid  |  datname
-------+-----------
 14187 | postgres
     1 | template1
 14186 | template0
(3 行)

postgres=# \q
-bash-4.2$ exit
ログアウト

SystemdでPostgreSQLの停止確認

 PostgreSQLインスタンスを停止できることを確認します。 確認が終わったらまた起動しておきます。

# systemctl stop postgresql-12.service
# systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 日 2020-09-20 04:36:29 JST; 6s ago ←停止状態
     Docs: https://www.postgresql.org/docs/12/static/
  Process: 2445 ExecStart=/usr/pgsql-12/bin/postmaster -D ${PGDATA} (code=exited, status=0/SUCCESS)
  Process: 2439 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 2445 (code=exited, status=0/SUCCESS)

 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  starting PostgreSQL 12.4 o...4-bit
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on IPv4 address ... 5432
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on IPv6 address ... 5432
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG:  listening on Unix socket "...5432"
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.003 JST [2445] LOG:  listening on Unix socket "...5432"
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] LOG:  redirecting log output to ...ocess
 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] HINT:  Future log output will ap...log".
 9月 20 04:29:12 centos78 systemd[1]: Started PostgreSQL 12 database server.
 9月 20 04:36:28 centos78 systemd[1]: Stopping PostgreSQL 12 database server...
 9月 20 04:36:29 centos78 systemd[1]: Stopped PostgreSQL 12 database server.
Hint: Some lines were ellipsized, use -l to show in full.
# ps -ef | grep postgres | grep -v grep ←PostgreSQLのプロセスが停止しているので何も表示されない
# systemctl start postgresql-12.service ←停止確認が終わったらまた起動しておく

アーカイブ確認

 PostgreSQLのインストール直後はアーカイブファイルは存在しませんが、 上記動作確認を行っている中でWALファイルが循環し、アーカイブされるため、 最後にアーカイブファイルが作成されていることを確認します。

# cd /bkup/pgdata1/pg_arch/
# ls -l
合計 16384
-rw------- 1 postgres postgres 16777216  9月 20 04:36 000000010000000000000001

参考にしたサイト