PostgreSQL の稼動状態をきれいなレポートで確認する
PostgreSQL データベースの稼動状態を HTML でキレイに見たい場合に使えそうなスクリプトを作ってみました。 2つのスクリプトから構成されていますので、どちらも同じディレクトリに配置して下さい。PostgreSQL レポート生成用シェルスクリプト
pgsql_report.sh というファイル名で下記のシェルスクリプトを作成します。スクリプト内のデータベース接続先やポート番号、データベース名、データベースユーザー名は書き換えて使って下さい。#!/bin/bash # # pgsql_report.sh # echo ${SQL} | psql \ -h 127.0.0.1 \ -p 5432 \ -d hoge \ -U postgres \ -f pgsql_report.sql
PostgreSQL レポート生成用 SQL スクリプト
そして下記の SQL を pgsql_report.sql というファイル名で保存して下さい。\o settings_report.html \T 'cellspacing=0 cellpadding=0' \qecho '<html><head><style>H2{background:#e6e6e6}</style>' \qecho '<title>PostgreSQL Report</title></head><body>' \qecho '<table><tr valign=''top''><td>' \qecho '<h2>Report Date</h2>' \pset format html SELECT current_timestamp AS report_timestamp; \qecho '<h2>PostgreSQL Basic Information</h2>' \pset format html SELECT version() AS PostgreSQL_Version; \H \qecho '<h2>PostgreSQL Database Settings</h2>' \x on \t on \pset format html SELECT category, string_agg(name || '=' || setting, E'\n' ORDER BY name) As settings FROM pg_settings WHERE 1 = 1 GROUP BY category ORDER BY category; \x off \t off \H \qecho '<h2>Current Sessions</h2>' \pset format html SELECT procpid, usename, application_name, client_addr, query_start, waiting, current_query FROM pg_stat_activity ORDER BY query_start; \H \qecho '<h2>Database Sizing Report</h2>' \pset format html SELECT d.datname AS Name, pg_catalog.pg_get_userbyid(d.datdba) AS Owner, CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname)) ELSE 'No Access' END AS SIZE FROM pg_catalog.pg_database d ORDER BY CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_database_size(d.datname) ELSE NULL END DESC -- nulls first ; \H \qecho '<h2>Relation Sizing Report (Top 10)</h2>' \pset format html SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_relation_size(C.oid) DESC LIMIT 10; \qecho '</td></tr></table>' \qecho '</body></html>' \o
結果として生成される PostgreSQL レポートを見てみる
では上記2つのファイルを同じディレクトリに作成したら、実際にレポートを作成してみましょう。#!/bin/bash $ ./pgsql_report.sh
結果として次のような HTML レポートが生成されます。
生成されたレポートはシェルスクリプト内でメールで送信するようにしたりすると良いでしょう。