7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQL でデータベースクラスタの場所を調べるには

Last updated at Posted at 2020-09-13

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

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?