PostgreSQLサーバーの様々な情報をSQLで取得する方法を紹介します。本番環境のPostgreSQLサーバーにSSHログインできない場合には、SQLだけでPostgreSQLサーバーの情報を取得できると大変便利です。どのような設定でサーバーが稼働しているのか確認することで、パフォーマンス向上などの参考になります。ここで紹介するSQLは、PostgreSQLのバージョン9以上で検証したSQLとなっています。
- PostgreSQLのバージョン情報を取得
- PostgreSQLサーバーが起動された日時を取得
- PostgreSQLサーバーの設定ファイルが最後に読み込まれた日時を取得
- PostgreSQLサーバーの設定ファイルの場所を取得する
- PostgreSQLサーバーのデータが格納されているディレクトリを確認
- PostgreSQLサーバーのログ出力設定を取得
- PostgreSQLサーバーのメモリー関連情報を取得
- PostgreSQLサーバーのデータベース接続関連情報取得
- PostgreSQLサーバーの日時を確認する
- PostgreSQLサーバーに接続している自分の接続のネットワーク情報
- PostgreSQLサーバーに接続している現在のセッション情報を取得
- まとめ
PostgreSQLのバージョン情報を取得
PostgreSQLのバージョンを取得するには、次のようなSQLを実行します。バージョンの完全な情報や、バージョン番号だけを取得することが出来ます。
SELECT
version(),
current_setting('server_version') AS "server_version",
current_setting('server_version_num') AS "server_version_num";
+--------------------+------------------------------------------------------+
| version | PostgreSQL 13.18 on x86_64-pc-linux-gnu, ..., 64-bit |
| server_version | 13.18 |
| server_version_num | 130018 |
+--------------------+------------------------------------------------------+
PostgreSQLサーバーが起動された日時を取得
PostgreSQLサーバーがいつ起動されたのかを調べるには、次のSQLを実行します。
SELECT pg_postmaster_start_time();
+-------------------------------+
| pg_postmaster_start_time |
+-------------------------------+
| 2024-12-20 14:35:32.022951+09 |
+-------------------------------+
PostgreSQLサーバーの設定ファイルが最後に読み込まれた日時を取得
PostgreSQLサーバーの設定ファイルが最後に読み込まれた日時を取得するには次のSQLを実行します。これはPostgreSQLサーバーが起動された日時ではなく、PostgreSQLサーバーの設定ファイルが最後に読み込まれた日時を指しています。PostgreSQLの設定ファイルは、「pg_ctl reload」コマンドや「SELECT pg_reload_conf();」コマンドを実行することで、設定ファイルだけを再読み込みさせることが出来ます。
SELECT pg_conf_load_time();
+-------------------------------+
| pg_conf_load_time |
+-------------------------------+
| 2024-12-25 04:44:34.229445+09 |
+-------------------------------+
PostgreSQLサーバーの設定ファイルの場所を取得する
PostgreSQLサーバーの設定ファイルがどこにあるか場所を確認することが出来ます。postgresql.conf、pg_hba.conf、pg_ident.confというファイルの位置やファイル名を確認することが出来ます。
SELECT
current_setting('config_file') AS "config_file",
current_setting('hba_file') AS "hba_file",
current_setting('ident_file') AS "ident_file";
+-------------+----------------------------------------+
| config_file | /var/lib/pgsql/13/data/postgresql.conf |
| hba_file | /var/lib/pgsql/13/data/pg_hba.conf |
| ident_file | /var/lib/pgsql/13/data/pg_ident.conf |
+-------------+----------------------------------------+
PostgreSQLサーバーのデータが格納されているディレクトリを確認
PostgreSQLデータベースのデータがどのディレクトリに保存されているのか場所を確認することができます。
SELECT current_setting('data_directory') AS "data_directory";
+------------------------+
| data_directory |
+------------------------+
| /var/lib/pgsql/13/data |
+------------------------+
PostgreSQLサーバーのログ出力設定を取得
以下のSQLで、PostgreSQLサーバー上でログファイルへの出力が有効化されているか、ログがどのディレクトリに州つりょくされているか、現在ログが出力されているログファイル名は何か等の設定情報を確認することが出来ます。
SELECT
current_setting('logging_collector') AS "logging_collector",
current_setting('log_destination') AS "log_destination",
current_setting('log_directory') AS "log_directory",
current_setting('log_filename') AS "log_filename";
+--------------------+-------------------+
| logging_collector | on |
| log_destination | stderr |
| log_directory | log |
| log_filename | postgresql-%a.log |
+--------------------+-------------------+
PostgreSQL-10以上のバージョンであれば、次のように現在書き込みが行われているログファイル名を取得することも可能です。
SELECT pg_current_logfile();
+--------------------+------------------------+
| pg_current_logfile | log/postgresql-Sat.log |
+--------------------+------------------------+
PostgreSQLサーバーのメモリー関連情報を取得
PostgreSQLサーバーのメモリー情報を取得するには次のSQLを実行します。
SELECT
current_setting('shared_buffers') AS "shared_buffers",
current_setting('work_mem') AS "work_mem",
current_setting('temp_buffers') AS "temp_buffers",
current_setting('maintenance_work_mem') AS "maintenance_work_mem",
current_setting('effective_cache_size') AS "effective_cache_size";
+----------------------+------+
| shared_buffers | 4GB |
| work_mem | 4MB |
| temp_buffers | 8MB |
| maintenance_work_mem | 1GB |
| effective_cache_size | 12GB |
+----------------------+------+
PostgreSQLサーバーのデータベース接続関連情報取得
最大接続数関連情報やパスワード暗号方式などを取得することが出来ます。
SELECT
current_setting('max_connections') AS "max_connections",
current_setting('max_files_per_process') AS "max_files_per_process",
current_setting('track_activities') AS "track_activities",
current_setting('track_counts') AS "track_counts",
current_setting('password_encryption') AS "password_encryption";
+-----------------------+------+
| max_connections | 2048 |
| max_files_per_process | 1000 |
| track_activities | on |
| track_counts | on |
| password_encryption | md5 |
+-----------------------+------+
PostgreSQLサーバーの日時を確認する
PostgreSQLサーバーの時刻を確認するSQLです。様々な関数で取得することが出来ますので、可能な限りの関数で日時を取得するSQLを記載します。
SELECT
now(),
timeofday(),
current_timestamp,
current_date,
current_time,
localtime,
localtimestamp,
clock_timestamp(),
statement_timestamp(),
transaction_timestamp();
+-----------------------+-------------------------------------+
| now | 2025-01-11 15:39:23.26964+09 |
| timeofday | Sat Jan 11 15:39:23.270388 2025 JST |
| current_timestamp | 2025-01-11 15:39:23.26964+09 |
| current_date | 2025-01-11 |
| current_time | 15:39:23.26964+09 |
| localtime | 15:39:23.26964 |
| localtimestamp | 2025-01-11 15:39:23.26964 |
| clock_timestamp | 2025-01-11 15:39:23.2704+09 |
| statement_timestamp | 2025-01-11 15:39:23.26964+09 |
| transaction_timestamp | 2025-01-11 15:39:23.26964+09 |
+-----------------------+-------------------------------------+
PostgreSQLサーバーに接続している自分の接続のネットワーク情報
PostgreSQLに接続している現在の自分の接続に関するネットワーク情報を取得します。自分のIPアドレスはクライアント(client)で、PostgreSQLサーバー側のIPアドレスはサーバー側(server)として表示されます。
SELECT
inet_client_addr(),
inet_client_addr(),
inet_server_addr(),
inet_server_port();
+------------------+----------------+
| inet_client_addr | 192.168.120.11 |
| inet_client_addr | 192.168.120.11 |
| inet_server_addr | 10.10.10.8 |
| inet_server_port | 5432 |
+------------------+----------------+
PostgreSQLサーバーに接続している現在のセッション情報を取得
今現在自分で接続しているPostgreSQLに関する情報を取得するSQLです。あくまでも今自分が接続している接続に関する情報を表示するSQLとなっています。
SELECT
user,
current_role,
current_user,
session_user,
current_database(),
current_catalog,
current_schema,
pg_backend_pid(),
current_query();
+------------------+-------------------------+
| user | postgres |
| current_role | postgres |
| current_user | postgres |
| session_user | postgres |
| current_database | radiuslog |
| current_catalog | radiuslog |
| current_schema | public |
| pg_backend_pid | 3091576 |
| current_query | SELECT +|
| | user, +|
| | current_role, +|
| | current_user, +|
| | session_user, +|
| | current_database(),+|
| | current_catalog, +|
| | current_schema, +|
| | pg_backend_pid(), +|
| | current_query() |
+------------------+-------------------------+
まとめ
PostgreSQLのSQLだけでPostgreSQLサーバーの様々な情報を取得する方法を紹介してきました。情報確認出来次第、随時追加して最新化していきます。
本番環境データベースにはログインできない場合がありますが、ここで紹介するSQLを使うことでサーバーにログインできなくてもサーバーの各種設定を確認することが出来るようになり大変重宝します。