データベースクラスタは 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
を探し、その値を見れば分かります。