2026/02/01

PostgreSQL 15の新機能、仕様変更、不具合修正。開発者、運用管理管理者向け

 

1. PostgreSQL 15 基本情報

  • リリース日: 2022年10月13日

  • コンセプト: 開発者体験の向上、パフォーマンスの最適化、運用管理の効率化


2. 開発者向け:新機能と仕様変更

SQL標準への準拠と、アプリケーションロジックの簡素化に繋がる機能が多数追加されました。

主な新機能

  • MERGEコマンドのサポート: * 条件に応じて INSERTUPDATEDELETE を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_compressionpg_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_basebackuppg_backup_start (非排他的) に書き換えておくことが必須です。