データベースクラスタは PostgreSQL でデータベースを格納する領域です。その場所が分からないと、PostgreSQL を管理する上で何かと困ります。この記事では、データベースクラスタの場所を調べる方法について説明します。
PostgreSQL のスーパーユーザ postgres でデータベースに接続できるなら、psql コマンドで接続し、SHOW コマンドで data_directory パラメータの値を見れば分かります。
$ psql
=# SHOW data_directory;
data_directory
------------------------
/var/lib/pgsql/12/data
(1 行)
=# \q
PostgreSQL が動作するホストに接続できるなら、接続し、ps コマンドで PostgreSQL のマスタプロセスを調べます。
$ ps axf | grep -E "postmaster|postgres"
10405 pts/0 S+ 0:00 \_ grep -E postmaster|postgres
7572 ? S 0:00 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data
7574 ? Ss 0:00 \_ postgres: startup recovering 000000010000000000000005
7575 ? Ss 0:00 \_ postgres: checkpointer
7576 ? Ss 0:00 \_ postgres: background writer
7577 ? Ss 0:00 \_ postgres: stats collector
7578 ? Ss 0:00 \_ postgres: walreceiver streaming 0/5013C10
マスタプロセスは、名前が postmaster または postgres で、\_ で表される親子関係の一番上になります。そのコマンドラインに -D または --pgdata オプションがあれば、その引数を見れば分かります。
オプションがなければ、一番左の PID (上記では 7572) をもとに環境変数を調べます。それには、プロセスを起動した postgres ユーザ、または root ユーザの権限が必要です。
$ strings /proc/7572/environ | grep PGDATA
PGDATA=/var/lib/pgsql/12/data
環境変数は /proc/PID/environ ファイルを見れば分かります。ファイルは \0 (NULL 文字) で区切られていて、そのままでは見にくいので、strings コマンドで変数ごとに 1 行で出力し、その中から grep コマンドで環境変数 PGDATA を探し、その値を見れば分かります。