PostgreSQL 13 ストリーミングレプリケーションの障害復旧

スポンサーリンク

PostgreSQLはストリーミングレプリケーションと呼ばれるデータコピーの仕組みがあります。3台以上のプライマリ/スレーブ構成を紹介し、ストリーミングレプリケーションの障害復旧について説明します。

動作確認構成

以下の環境で動作確認を行います。

 +----------+            +----------+
 |          |            |          |
 | centos10 +-----+------+ centos11 |
 | (primary)|     |      | (standby)|
 +----------+     |      +----------+
192.168.56.10/24  |  192.168.56.11/24
                  |
                  |      +----------+
                  |      |          |
                  +------+ centos12 |
                  |      | (standby)|
                  |      +----------+
                  |  192.168.56.12/24
                  |
                  |      +----------+
                  |      |          |
                  +------+ centos13 |
                         | (standby)|
                         +----------+
                     192.168.56.13/24

事前準備

マスターサーバの構築

postgresql.confおよびpg_hba.confに以下を加筆します。スタンバイ機は3台構成とし、そのうち2台まではWALが同期している状態とします。

NFSサーバを構築しNFS上にWALのアーカイビングを出力する構成とします。

cat << EOF >> /var/lib/pgsql/13/data/postgresql.conf 

listen_addresses = '0.0.0.0'
archive_mode = on
archive_command = 'cp -p %p /nfs/postgres/wal/%f'
archive_timeout = 60
max_wal_senders = 10
synchronous_commit = 'remote_write'
synchronous_standby_names = 'ANY 2 (centos11,centos12,centos13)'
EOF

cat << EOF >> /var/lib/pgsql/13/data/pg_hba.conf

host    replication     postgres        192.168.56.0/24  trust
EOF

再起動し設定を反映させます。

systemctl restart postgresql-13.service 

スタンバイサーバの構築

pg_basebackupコマンドを使用して、プライマリサーバのデータを1台目スタンバイサーバへコピーします。

1台目スタンバイサーバのデータを2,3台目へコピーします。コピー方法は環境に応じて適宜変更ください。

pg_basebackup -R -D ${PGDATA} -h 192.168.56.10
rsync -av root@192.168.56.11:/var/lib/pgsql/13/data/ ${PGDATA}
rsync -av root@192.168.56.11:/var/lib/pgsql/13/data/ ${PGDATA}

postgresql.auto.confのsynchronous_standby_namesにapplication_nameを加筆します。application_nameの値はスタンバイ機によって適宜変更してください。

# vi /var/lib/pgsql/13/data/postgresql.auto.conf 

primary_conninfo = 'user=postgres <omitted> application_name=centos11'
# vi /var/lib/pgsql/13/data/postgresql.auto.conf 

primary_conninfo = 'user=postgres <omitted> application_name=centos12'
# vi /var/lib/pgsql/13/data/postgresql.auto.conf 

primary_conninfo = 'user=postgres <omitted> application_name=centos13'

postgresql.confのプライマリ固有の設定をコメントアウトします。

# vi /var/lib/pgsql/13/data/postgresql.conf

#listen_addresses = '0.0.0.0'
#max_wal_senders = 10
#synchronous_commit = 'remote_write'
#synchronous_standby_names = 'ANY 2 (centos11,centos12,centos13)'

postgresqlを起動し、レプリケーションを開始します。

systemctl start postgresql-13.service

レプリケーションが開始された旨のログを確認します。

[root@centos11 ~]# tail -n 3 /var/lib/pgsql/13/data/log/postgresql-Sat.log
2020-12-26 16:39:48.679 JST [1670] LOG:  0/19000000 でリカバリの一貫性が確保されました
2020-12-26 16:39:48.680 JST [1667] LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
2020-12-26 16:39:48.876 JST [1674] LOG:  プライマリのタイムライン1の 0/1B000000からでWALストリーミングを始めます
[root@centos12 ~]# tail -n 3 /var/lib/pgsql/13/data/log/postgresql-Sat.log 
2020-12-26 16:36:05.152 JST [1491] LOG:  0/19000000 でリカバリの一貫性が確保されました
2020-12-26 16:36:05.153 JST [1488] LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
2020-12-26 16:36:05.253 JST [1495] LOG:  プライマリのタイムライン1の 0/19000000からでWALストリーミングを始めます
[root@centos13 ~]# tail -n 3 /var/lib/pgsql/13/data/log/postgresql-Sat.log 
2020-12-26 16:36:15.984 JST [1184] LOG:  0/19000000 でリカバリの一貫性が確保されました
2020-12-26 16:36:15.985 JST [1181] LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
2020-12-26 16:36:16.079 JST [1188] LOG:  プライマリのタイムライン1の 0/19000000からでWALストリーミングを始めます

スタンバイサーバの障害復旧

WALが残存している場合

スタンバイ機のうち1つに障害を発生させます。

systemctl stop postgresql-13.service

障害が発生した機器はチェックポイントとなるWALからの復旧を試みます。

[postgres@centos11 ~]$ /usr/pgsql-13/bin/pg_controldata 
pg_control version number:            1300
Catalog version number:               202007201
Database system identifier:           6910180416328971117
Database cluster state:               in archive recovery
pg_control last modified:             Sat 26 Dec 2020 04:53:24 PM JST
Latest checkpoint location:           0/21000098
Latest checkpoint's REDO location:    0/21000060
Latest checkpoint's REDO WAL file:    000000010000000000000021
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0:193643
Latest checkpoint's NextOID:          24607
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        479
Latest checkpoint's oldestXID's DB:   1
Latest checkpoint's oldestActiveXID:  193643
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint:            Sat 26 Dec 2020 04:49:07 PM JST
Fake LSN counter for unlogged rels:   0/3E8
Minimum recovery ending location:     0/22000000

 <omitted>

プライマリサーバにWALが残っている場合は、このWALを使って復旧します。

[postgres@centos10 ~]$ ls -l 13/data/pg_wal/
total 163840
-rw-------. 1 postgres postgres 16777216 Dec 26 16:52 000000010000000000000021
-rw-------. 1 postgres postgres 16777216 Dec 26 16:55 000000010000000000000022
-rw-------. 1 postgres postgres 16777216 Dec 26 16:56 000000010000000000000023
-rw-------. 1 postgres postgres 16777216 Dec 26 16:39 000000010000000000000024
-rw-------. 1 postgres postgres 16777216 Dec 26 16:40 000000010000000000000025
-rw-------. 1 postgres postgres 16777216 Dec 26 16:42 000000010000000000000026
-rw-------. 1 postgres postgres 16777216 Dec 26 16:43 000000010000000000000027
-rw-------. 1 postgres postgres 16777216 Dec 26 16:46 000000010000000000000028
-rw-------. 1 postgres postgres 16777216 Dec 26 16:47 000000010000000000000029
-rw-------. 1 postgres postgres 16777216 Dec 26 16:48 00000001000000000000002A
drwx------. 2 postgres postgres       80 Dec 26 16:55 archive_status

この場合は、スタンバイサーバを起動するのみで復旧可能です。

systemctl start postgresql-13.service

WALが消失している場合 – 復旧不能の確認

前述のシナリオはWALが残存している場合です。WALが消失してしまった場合は、スタンバイ機の構築手順同様にpg_basebackupコマンドなどを利用すれば復旧が可能です。

しかし、高負荷でプライマリサーバに余力がない場合はpg_backbackupによる復旧が出来ない場合もありえるかもしれません。このような時の回避策として、WALアーカイビングを使用した復旧方法を説明します。

まず、スタンバイ機の1台に障害を発生させます。

systemctl stop postgresql-13.service

プライマリ機に充分な更新処理を発生させ、WALをローテートさせ、復旧不能の状態にします。

createdb test
/usr/pgsql-13/bin/pgbench -i test
/usr/pgsql-13/bin/pgbench -c 5 -t 10000 test

スタンバイ機のチェックポイントを確認します。この場合は、000000010000000000000026である事が分かります。

[postgres@centos11 ~]$ /usr/pgsql-13/bin/pg_controldata 
pg_control version number:            1300
Catalog version number:               202007201
Database system identifier:           6910180416328971117
Database cluster state:               shut down in recovery
pg_control last modified:             Sat 26 Dec 2020 05:06:04 PM JST
Latest checkpoint location:           0/290CAC40
Latest checkpoint's REDO location:    0/2626B8D8
Latest checkpoint's REDO WAL file:    000000010000000000000026
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0:219133

 <omitted>

チェックポイントである000000010000000000000026以降は、スタンバイ機自身が保持するWALを用いて復旧させます。しかし、WALは00000001000000000000002Aまでしか持っていない事が分かります。

PostgreSQL停止中の状態でどこまでWALが書かれているかを判断するにはタイムスタンプに着目すると手っ取り早く判断できます。もし、ダメ押しの確認をしたいならば、pg_waldumpコマンドなどを併用しましょう。

[postgres@centos11 ~]$ ls -l /var/lib/pgsql/13/data/pg_wal/
total 163840
-rw-------. 1 postgres postgres 16777216 Dec 26 17:04 000000010000000000000026
-rw-------. 1 postgres postgres 16777216 Dec 26 17:04 000000010000000000000027
-rw-------. 1 postgres postgres 16777216 Dec 26 17:04 000000010000000000000028
-rw-------. 1 postgres postgres 16777216 Dec 26 17:04 000000010000000000000029
-rw-------. 1 postgres postgres 16777216 Dec 26 17:04 00000001000000000000002A
-rw-------. 1 postgres postgres 16777216 Dec 26 16:52 00000001000000000000002B
-rw-------. 1 postgres postgres 16777216 Dec 26 16:55 00000001000000000000002C
-rw-------. 1 postgres postgres 16777216 Dec 26 16:56 00000001000000000000002D
-rw-------. 1 postgres postgres 16777216 Dec 26 16:57 00000001000000000000002E
-rw-------. 1 postgres postgres 16777216 Dec 26 16:58 00000001000000000000002F
drwx------. 2 postgres postgres      154 Dec 26 17:06 archive_status
[postgres@centos11 ~]$ 
[postgres@centos11 ~]$ 
[postgres@centos11 ~]$ cd /var/lib/pgsql/13/data/pg_wal/
[postgres@centos11 pg_wal]$ /usr/pgsql-13/bin/pg_waldump 00000001000000000000002A | tail -n 3
rmgr: Transaction len (rec/tot):    194/   194, tx:     264037, lsn: 0/2A3BCAF8, prev 0/2A3BCA38, desc: COMMIT 2020-12-26 17:03:24.329152 JST; inval msgs: catcache 58 catcache 58 catcache 58 catcache 58 catcache 58 catcache 58 catcache 50 catcache 49 relcache 16385
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/2A3BCBC0, prev 0/2A3BCAF8, desc: RUNNING_XACTS nextXid 264038 latestCompletedXid 264037 oldestRunningXid 264038
rmgr: XLOG        len (rec/tot):     24/    24, tx:          0, lsn: 0/2A3BCBF8, prev 0/2A3BCBC0, desc: SWITCH 
[postgres@centos11 pg_wal]$ 
[postgres@centos11 pg_wal]$ 
[postgres@centos11 pg_wal]$ /usr/pgsql-13/bin/pg_waldump 00000001000000000000002B | tail
pg_waldump: fatal: could not find a valid record after 0/2B000000
[postgres@centos11 pg_wal]$ 

スタンバイ機は自分が持つWALで00000001000000000000002Aまで復旧させます。その後は、プライマリ機が持つWALを問い合わせに行きますが、プライマリ機は00000001000000000000002Bを持っていない事が分かります。

このような場合は、単純にPostgreSQLを起動しても復旧できない事が予想できます。

[postgres@centos10 ~]$ ls -l /var/lib/pgsql/13/data/pg_wal/
total 163840
-rw-------. 1 postgres postgres 16777216 Dec 26 17:09 00000001000000000000002E
-rw-------. 1 postgres postgres 16777216 Dec 26 17:10 00000001000000000000002F
-rw-------. 1 postgres postgres 16777216 Dec 26 17:11 000000010000000000000030
-rw-------. 1 postgres postgres 16777216 Dec 26 17:12 000000010000000000000031
-rw-------. 1 postgres postgres 16777216 Dec 26 17:12 000000010000000000000032
-rw-------. 1 postgres postgres 16777216 Dec 26 17:02 000000010000000000000033
-rw-------. 1 postgres postgres 16777216 Dec 26 17:03 000000010000000000000034
-rw-------. 1 postgres postgres 16777216 Dec 26 17:06 000000010000000000000035
-rw-------. 1 postgres postgres 16777216 Dec 26 17:07 000000010000000000000036
-rw-------. 1 postgres postgres 16777216 Dec 26 17:08 000000010000000000000037
drwx------. 2 postgres postgres      154 Dec 26 17:12 archive_status
[postgres@centos10 ~]$

確かにスタンバイ側のPostgreSQLを起動しても、レプリケーションが再開できないログが出力されています。

[root@centos11 ~]# systemctl start postgresql-13.service 
[root@centos11 ~]# 
[root@centos11 ~]# tail -n 3 /var/lib/pgsql/13/data/log/postgresql-Sat.log 
2020-12-26 17:24:47.281 JST [1167] FATAL:  WAL ストリームからデータを受信できませんでした: ERROR:  要求された WAL セグメント 00000001000000000000002B はすでに削除されています
2020-12-26 17:24:52.272 JST [1172] LOG:  プライマリのタイムライン1の 0/2B000000からでWALストリーミングを始めます
2020-12-26 17:24:52.272 JST [1172] FATAL:  WAL ストリームからデータを受信できませんでした: ERROR:  要求された WAL セグメント 00000001000000000000002B はすでに削除されています

プライマリ機側でもエラーが出力されています。

[postgres@centos10 ~]$ tail -n 3 /var/lib/pgsql/13/data/log/postgresql-Sat.log 
2020-12-26 17:26:02.353 JST [1994] ERROR:  要求された WAL セグメント 00000001000000000000002B はすでに削除されています
2020-12-26 17:26:07.355 JST [1995] ERROR:  要求された WAL セグメント 00000001000000000000002B はすでに削除されています
2020-12-26 17:26:12.369 JST [1996] ERROR:  要求された WAL セグメント 00000001000000000000002B はすでに削除されています

WALが消失している場合 – アーカイビングによる復旧

アーカイビングに保存されているWALをスタンバイ機にコピーすれば復旧させる事ができます。手作業でWALをコピーしても復旧できますが、手作業は事故の元ですので、restore_commadを/var/lib/pgsql/13/data/postgresql.auto.confに設定しましょう。

vi /var/lib/pgsql/13/data/postgresql.auto.conf 

# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=postgres passfile=''/var/lib/pgsql/.pgpass'' channel_binding=prefer host=192.168.56.10 port=5432 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any application_name=centos11'
restore_command = 'cp /nfs/postgres/wal/%f %p'

スタンバイ機のPostgreSQLを再起動します。

systemctl restart postgresql-13.service

ストリーミグレプリケーションが再開された事を確認します。

[root@centos11 ~]# tail -f /var/lib/pgsql/13/data/log/postgresql-Sat.log 
2020-12-26 17:29:27.092 JST [1308] LOG:  ログファイル"00000001000000000000002F"をアーカイブからリストアしました
2020-12-26 17:29:27.689 JST [1308] LOG:  ログファイル"000000010000000000000030"をアーカイブからリストアしました
2020-12-26 17:29:28.001 JST [1308] LOG:  ログファイル"000000010000000000000031"をアーカイブからリストアしました
2020-12-26 17:29:28.229 JST [1308] LOG:  ログファイル"000000010000000000000032"をアーカイブからリストアしました
2020-12-26 17:29:28.642 JST [1308] LOG:  ログファイル"000000010000000000000033"をアーカイブからリストアしました
2020-12-26 17:29:29.119 JST [1308] LOG:  ログファイル"000000010000000000000034"をアーカイブからリストアしました
2020-12-26 17:29:29.531 JST [1308] LOG:  ログファイル"000000010000000000000035"をアーカイブからリストアしました
2020-12-26 17:29:29.587 JST [1308] LOG:  ログファイル"000000010000000000000036"をアーカイブからリストアしました
cp: '/nfs/postgres/wal/000000010000000000000037' を stat できません: No such file or directory
2020-12-26 17:29:29.678 JST [1332] LOG:  プライマリのタイムライン1の 0/37000000からでWALストリーミングを始めます

プライマリサーバの障害復旧

プライマリサーバが完全に消失し、スタンバイサーバの1つをプラマリサーバに昇格せざるを得ないような状況を想定します。

 +----------+            +----------+
 |          |            |          |
 | centos10 +-----+------+ centos11 |
 |  (消失)  |     |      | (primary)|
 +----------+     |      +----------+
192.168.56.10/24  |  192.168.56.11/24
                  |
                  |      +----------+
                  |      |          |
                  +------+ centos12 |
                  |      | (standby)|
                  |      +----------+
                  |  192.168.56.12/24
                  |
                  |      +----------+
                  |      |          |
                  +------+ centos13 |
                         | (standby)|
                         +----------+
                     192.168.56.13/24

プライマリへの昇格

プライマリに必要なパラメタをpostgresql.confおよびpg_bha.confに加筆します。

cat << EOF >> /var/lib/pgsql/13/data/postgresql.conf 

listen_addresses = '0.0.0.0'
archive_mode = on
archive_command = 'cp -p %p /nfs/postgres/wal/%f'
archive_timeout = 60
max_wal_senders = 10
synchronous_commit = 'remote_write'
synchronous_standby_names = 'ANY 1 (centos12,centos13)'
EOF

cat << EOF >> /var/lib/pgsql/13/data/pg_hba.conf

host    replication     postgres        192.168.56.0/24  trust
EOF

スタンバイ機としてのパラメタをコメントアウトまたは削除します。

# vi /var/lib/pgsql/13/data/postgresql.auto.conf 

#primary_conninfo = 'user=postgres passfile=''/var/lib/pgsql/.pgpass'' channel_binding=prefer host=192.168.56.10 port=5432 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any application_name=centos11'

再起動により設定を反映させます。

systemctl restart postgresql-13.service 

スタンバイサーバをプライマリサーバに昇格させるには、pg_ctl promoteを実行します。

[postgres@centos11 ~]$ /usr/pgsql-13/bin/pg_ctl promote
waiting for server to promote.... done
server promoted
[postgres@centos11 ~]$ 

ログを見るとプライマリへ昇格し、タイムラインが1から2へ変わった事が分かります。

[postgres@centos11 ~]$ tail -n 10 13/data/log/postgresql-Sun.log 
2020-12-27 13:08:35.473 JST [1092] ヒント:  データベースサーバはpg_walサブディレクトリに置かれたファイルを定期的に確認します。
2020-12-27 13:08:35.474 JST [1092] LOG:  スタンバイモードに入ります
2020-12-27 13:08:35.484 JST [1092] LOG:  0/370000A0 でリカバリの一貫性が確保されました
2020-12-27 13:08:35.484 JST [1092] LOG:  0/370000A0のレコード長が不正です:長さは24である必要がありますが、実際は0でした
2020-12-27 13:08:35.485 JST [1089] LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
2020-12-27 13:08:51.818 JST [1092] LOG:  昇格要求を受信しました
2020-12-27 13:08:51.818 JST [1092] LOG:  REDOは必要ありません
2020-12-27 13:08:51.818 JST [1092] LOG:  新しいタイムラインIDを選択: 2
2020-12-27 13:08:51.868 JST [1092] LOG:  アーカイブリカバリが完了しました
2020-12-27 13:08:51.915 JST [1089] LOG:  データベースシステムの接続受け付け準備が整いました

WALを見ると、タイムラインが2であるWALが出力されるようになった事が分かります。

[postgres@centos11 ~]$ ls -l 13/data/pg_wal/
total 196612
-rw-------. 1 postgres postgres 16777216 Dec 26 17:30 000000010000000000000037.partial
-rw-------. 1 postgres postgres 16777216 Dec 27 13:08 000000020000000000000037
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 000000020000000000000038
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 000000020000000000000039
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003A
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003B
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003C
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003D
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003E
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 00000002000000000000003F
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 000000020000000000000040
-rw-------. 1 postgres postgres 16777216 Dec 26 17:29 000000020000000000000041
-rw-------. 1 postgres postgres       42 Dec 27 13:08 00000002.history
drwx------. 2 postgres postgres       80 Dec 27 13:08 archive_status

スタンバイ機の設定変更

postgresql.auto.confに記載されているprimary_conninfoについて、宛先ホストを変更します。

$ vi /var/lib/pgsql/13/data/postgresql.auto.conf 
primary_conninfo = '<omitted> host=192.168.56.11 <omitted>'
$ vi /var/lib/pgsql/13/data/postgresql.auto.conf 
primary_conninfo = '<omitted> host=192.168.56.11 <omitted>'

再起動で設定を反映させます。

systemctl restart postgresql-13.service 

ログファイルを閲覧し、タイムライン2のWALを適用している事を読み取ります。

[root@centos12 ~]# tain -n 10 /var/lib/pgsql/13/data/log/postgresql-Sun.log 
2020-12-27 13:11:14.879 JST [1127] LOG:  0/370000A0 でリカバリの一貫性が確保されました
2020-12-27 13:11:14.879 JST [1127] LOG:  0/370000A0のレコードの後方リンク5C7502DB/A60が不正です
2020-12-27 13:11:14.882 JST [1124] LOG:  データベースシステムはリードオンリー接続の受け付け準備ができました
2020-12-27 13:11:15.171 JST [1131] LOG:  プライマリサーバからライムライン2用のタイムライン履歴ファイルを取り込みしています
2020-12-27 13:11:15.176 JST [1131] LOG:  プライマリのタイムライン1の 0/37000000からでWALストリーミングを始めます
2020-12-27 13:11:15.178 JST [1131] FATAL:  WAL ストリームからデータを受信できませんでした: ERROR:  要求された WAL セグメント 000000010000000000000037 はすでに削除されています
2020-12-27 13:11:15.179 JST [1127] LOG:  新しい目標タイムラインは2です
2020-12-27 13:11:15.266 JST [1135] LOG:  プライマリのタイムライン2の 0/37000000からでWALストリーミングを始めます
2020-12-27 13:11:15.349 JST [1127] LOG:  REDOを0/370000A0から開始します
[root@centos12 ~]# 

プライマリサーバで更新処理を発生させます。

createdb test2

スタンバイサーバに更新が反映されている事を確認します。

[postgres@centos12 ~]$ psql -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test      | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 test2     | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
(5 rows)
タイトルとURLをコピーしました