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 レポートが生成されます。
生成されたレポートはシェルスクリプト内でメールで送信するようにしたりすると良いでしょう。


