オープンソースのデータベース「PostgreSQL」のバージョン16がリリースされました。パフォーマンスの改善や論理レプリケーション機能の強化をはじめ、開発者のQOL向上やセキュリティ関連の更新など開発開始から35年経過しているとは思えない盛りだくさんな内容となっています。

PostgreSQL: PostgreSQL 16 Released!

https://www.postgresql.org/about/news/postgresql-16-released-2715/



◆クエリプランナーが改良される

・FULLおよびRIGHTのJOINを並列化可能に

・「DISTINCT」「ORDER BY」節と同時に集計関数を使用したクエリに対してより効率的なプランを生成

・「SELECT DISTINCT」クエリに対してインクリメンタルソートを使用

・ウィンドウ関数を最適化

・RIGHTおよびOUTERのアンチジョインを改良

◆その他のパフォーマンス向上

・COPYを使用したバルクロードが改善され、性能が最大300%向上

・libpqを使用したクライアントの負荷分散をサポート

・VACUUMの戦略を改善してテーブル全体をFREEZEする必要性を低減

・x86およびARMの両方のアーキテクチャでSIMDを利用したCPU高速化を導入

◆論理レプリケーション

・スタンバイインスタンスからの論理レプリケーションが可能に

・サブスクライバーが並列ワーカーを使用して大きなトランザクションを適用可能に

・サブスクライバーがプライマリキーを持たないテーブルでB-treeインデックスを使用可能に

・論理レプリケーション関係の新たな定義済みロールが追加されてアクセス制御が改善される

・双方向の論理レプリケーションをサポート

◆開発者体験の向上

・SQL/JSON標準の構文が追加される

「JSON_ARRAY()」「JSON_ARRAYAGG()」「IS JSON」などが追加されています。

・さまざまな数字の表現をサポート

「5_432_000」など、区切り文字としてアンダースコアが利用可能になったほか、「0x1538」「0o12470」「0b1010100111000」など10進数以外の表現も利用可能になりました。

・psqlで\bindを利用可能に

psqlの利用時において、「SELECT $1::int + $2::int \bind 1 2 \g」のように、パラメータ化されたクエリに\bindを使用して変数を置換することが可能になりました。

・文字列の照合順序の一般的なサポートが改善される

PostgreSQL 16は標準でICUをサポートして構築され、環境を元にICUロケールを決定するほか、ユーザーが独自のICU照合順序を定義することが可能になっています。

◆モニタリング

・I/Oアクセスパターンの分析用にpg_stat_io指標を導入

・pg_stat_all_tablesに最終スキャン日時を追加

・auto_explainの可読性向上

・pg_stat_statementsとpg_stat_activityのクエリ追跡アルゴリズムが改善

◆アクセスコントロールとセキュリティ

・pg_hba.confおよびpg_ident.confファイルの機能追加

ユーザ名とデータベース名の正規表現マッチングや外部設定ファイルのincludeディレクティブが使用できるようになりました。

・セキュリティ向上のためのクライアント接続パラメータが追加される

クライアントがサーバーから受け入れる認証パラメータを指定できるようにする「require_auth」や、PostgreSQLがクライアントの提供する信頼できる認証局ストアを使用する必要があることを示すsslrootcert="system"などのパラメータが追加されました。

・ケルベロス認証情報の委譲をサポート

postgres_fdwやdblinkなどの拡張機能が認証された資格情報を使用して信頼できるサービスに接続できるようになりました。

PostgreSQLのサポート期間はリリースから5年間ということで、バージョン16は2028年11月までサポートされる予定です。



なお、より詳細にアップデートの内容を確認したい場合はリリースノートをチェックしてみてください。