1. PostgreSQL 15 基本情報
リリース日: 2022年10月13日
コンセプト: 開発者体験の向上、パフォーマンスの最適化、運用管理の効率化
2. 開発者向け:新機能と仕様変更
SQL標準への準拠と、アプリケーションロジックの簡素化に繋がる機能が多数追加されました。
主な新機能
MERGEコマンドのサポート: * 条件に応じて
INSERT、UPDATE、DELETEを1つのSQL文で実行可能になりました。正規表現関数の拡充: *
regexp_count()、regexp_instr()、regexp_like()、regexp_substr()が追加され、他DB(Oracle等)からの移行や文字列操作が容易になりました。論理レプリケーションの改善: * 行フィルタリングと列リストの指定が可能になり、必要なデータのみをサブスクライバーに送信できるようになりました。
コンフリクト発生時に自動でサブスクリプションを停止する機能が追加されました。
JSONデータへの「多値インデックス」:
JSONB配列内の要素に対してインデックスを作成できるようになりました。
注意すべき仕様変更
publicスキーマのデフォルト権限の変更:重要: データベース所有者以外、
publicスキーマにオブジェクトを作成する権限(CREATE権限)がデフォルトで剥奪されました。V14以前の挙動が必要な場合は明示的なGRANTが必要です。
ICUロケールのサポート強化:ICU(International Components for Unicode)をデータベース全体のデフォルトとして設定可能になりました。
3. 運用管理担当者向け:パフォーマンスと管理
大規模環境や高負荷環境での運用を効率化する改善が含まれています。
パフォーマンス改善
ソート性能の向上:
メモリ内およびディスク上のソートアルゴリズムが改良され、ソート処理が最大で 25%〜400% 高速化されました。
ウィンドウ関数の最適化:
row_number()、rank()、dense_rank()などの実行効率が向上しました。
運用・バックアップの変更
排他的バックアップモード(Exclusive Backup)の削除:
V9.6で非推奨となった
pg_start_backup()等を使用する方式が完全に削除されました。pg_basebackup等の非排他的バックアップへの移行が必須です。
WAL圧縮のデフォルト変更:
wal_compressionがpg_lzからデフォルトで有効化されるようになりました。
ログ出力のJSON形式サポート:
log_destination = 'jsonlog'を設定することで、構造化ログを出力できるようになりました。
4. V15で修正・改善された不具合/制約
統計情報の管理方式変更:
統計情報を蓄積するプロセス(stats collector)が廃止され、統計データが 共有メモリ 上で管理されるようになりました。これにより、ディスクI/Oの負荷が軽減され、統計情報に関連する古い不具合や遅延が解消されました。
セキュリティ脆弱性の修正:
ビュー経由での統計情報漏洩(CVE-2017-7484の関連修正など)に対するチェックが、プランニングの初期段階で行われるよう強化されました。
メモリエラー時の安定性:
メモリ不足(OOM)が発生した際に、共有テーブルの統計情報が破損する可能性がある不具合が修正されました。
5. V14からV15へのアップグレード失敗談
実際に移行を行ったユーザーから報告されている、よくある落とし穴です。
① 「publicスキーマにテーブルが作れない!」
事象: アップグレード後、アプリケーションが
CREATE TABLEでエラーを吐くようになった。原因: 前述の通り、V15から
publicスキーマのデフォルト権限が厳格化されたため。教訓: 移行スクリプトに
GRANT CREATE ON SCHEMA public TO [ロール名];を含めるのを忘れないこと。
② 「外部ツールからの接続が切れた」
事象:
pg_upgrade後、古いバージョンの pgAdmin や BIツールから接続できなくなった。原因: 認証方式やシステムカタログの内部構造が一部変更され、古いクライアントライブラリが対応していなかった。
教訓: サーバーだけでなく、利用している管理ツールやドライバ(JDBC, psycopg2等)も最新版に更新しておく必要があります。
③ 「バックアップスクリプトが動かない」
事象: 長年運用していたシェルスクリプトによるバックアップが失敗する。
原因: 削除された「排他的バックアップ(pg_start_backup)」をまだ使っていた。
教訓: V15に上げる前に、バックアップ手順を
pg_basebackupかpg_backup_start(非排他的) に書き換えておくことが必須です。