【SQL実践|実務向け】PostgreSQL運用管理の基本:ALTER DATABASEによる設定変更と注意点

導入

データベース管理者(DBA)にとって、既存データベースの設定変更は日常的な作業です。特に、アプリケーションの負荷増大に伴う接続数制限の調整や、組織変更によるデータベース所有者の変更、あるいは開発環境から本番環境への移行に伴うリネームなどは避けて通れません。これらを適切に行うためのALTER DATABASEコマンドの知識は、安定したシステム運用に直結します。本稿では、実務で頻出する設定変更の手順と、現場で踏みやすい注意点を解説します。

基礎知識

ALTER DATABASEは、作成済みのPostgreSQLデータベースの属性を修正するためのコマンドです。変更できる対象は多岐にわたりますが、主に以下の3点に分類されます。
データベースオプション:同時接続数(CONNECTION LIMIT)やテンプレート属性の変更。
メタデータ:データベース名(RENAME)や所有者(OWNER)の変更。
設定パラメータ:特定データベースに対する実行時の設定値(SET/RESET)。
これらの操作には、スーパーユーザー権限または対象データベースの所有者権限が必要となります。

実装/解決策

実務では、単なる名前変更だけでなく、パフォーマンス維持のための接続数制限が重要です。データベースの接続数制限を適切に設定することで、特定のアプリケーションからの過剰な接続によるシステム全体のリソース枯渇を防ぐことができます。また、所有者の変更は、権限の分離や退職・異動に伴うセキュリティ管理の観点から不可欠な作業です。

サンプルプログラム

以下のコードは、実務でよく利用される基本的な変更手順です。必要に応じて環境に合わせて書き換えてください。

— 1. 同時接続数を制限する (リソース枯渇防止)
— 接続制限を10に設定
ALTER DATABASE my_app_db CONNECTION LIMIT 10;

— 2. データベース名を変更する
— 注意: 対象データベースに接続中のユーザーがいると失敗します
ALTER DATABASE old_name RENAME TO new_name;

— 3. 所有者を変更する
— 新しいオーナー(new_owner_user)に権限を移譲
ALTER DATABASE new_name OWNER TO new_owner_user;

— 4. 特定のパラメータをデータベース単位で設定する
— このデータベースのみ、クエリのタイムアウトを30秒に設定
ALTER DATABASE new_name SET statement_timeout = ’30s’;

— 5. 設定をデフォルトに戻す
ALTER DATABASE new_name RESET statement_timeout;

応用・注意点

現場で最も注意すべき点は、「接続中のデータベースに対する変更制限」です。

1. 接続中の名前変更・所有者変更:対象のデータベースに接続しているセッションが一つでもあると、RENAMEやOWNERの変更は失敗します。作業前には必ず pg_stat_activity を参照し、アクティブな接続がないことを確認してください。
2. 所有者変更の権限:所有者を変更する場合、実行ユーザーは「現在の所有者」かつ「新しい所有者のロールのメンバー」である必要があります。この条件を満たさない場合は、スーパーユーザーで実行するのが最も確実です。
3. SETパラメータの優先順位:ALTER DATABASEで設定したパラメータは、ロールごとの設定や、postgresql.confの全体設定よりも優先されます。予期せぬ動作を防ぐため、データベース単位の設定を行った場合は、必ずドキュメントを残し、設定値が競合していないか確認する癖をつけましょう。

適切な管理権限と手順を守ることで、これらの変更は安全に行うことが可能です。是非、日々の運用管理に取り入れてください。

コメント

タイトルとURLをコピーしました