9月25日、「PostgreSQL 18がリリースされた」。この記事では、最新のオープンソースデータベース「PostgreSQL 18」の主な新機能と改善点について詳しく紹介されている。以下に、その内容を紹介する。

パフォーマンス改善と新しいI/Oサブシステム
PostgreSQL 18では、非同期I/O(AIO)サブシステムが導入された。従来はOSの先読み機能に依存していたが、データベース固有のアクセスパターンを考慮できず性能に限界があった。AIOは複数のI/Oリクエストを並行処理することで、ストレージからの読み込み性能を最大3倍に向上させることが確認されている。対象となる操作はシーケンシャルスキャン、ビットマップヒープスキャン、VACUUMなどである。
また、新たに導入されたio_method
パラメータにより、worker
やio_uring
などの方式を選択可能で、従来通りの同期方式(sync
)も維持できる。
アップグレードの高速化
PostgreSQL 18では、主要バージョンアップ時にプランナー統計情報を保持できるようになった。従来はアップグレード後にANALYZE
を完了させるまで性能が劣化するケースが多かったが、この改善によりアップグレード直後から安定した性能を発揮できる。
さらに、pg_upgrade
ユーティリティに以下の改善が加えられた。
- 多数のオブジェクトを含むデータベースでの高速化
--jobs
フラグによる並列チェック処理--swap
フラグによるディレクトリ入れ替え方式のサポート
クエリ処理とインデックス性能の強化
- 複合B-treeインデックスにおける「スキップスキャン」の導入により、一部の条件が省略されたクエリでもインデックスを活用可能。
OR
条件を含むクエリに対してもインデックス利用が最適化され、実行速度が大幅に向上。- ハッシュ結合の性能向上やマージ結合のインクリメンタルソート対応など、結合処理全般が改善。
- GINインデックスの並列構築が可能となり、B-treeやBRINに続いてスケーラビリティが向上。
- ARM NEONやSVE命令セットを活用したハードウェアアクセラレーションの追加。
開発者向け新機能
- 仮想生成列: クエリ実行時に値を算出する方式が追加され、これが生成列のデフォルトとなった。
RETURNING
句の拡張:INSERT
、UPDATE
、DELETE
、MERGE
でOLD
値とNEW
値の両方を取得可能。- UUIDv7対応:
uuidv7()
関数でタイムスタンプ順のUUID生成が可能になり、キャッシュ効率とインデックス性能が向上。 - 時間制約(Temporal Constraints):
WITHOUT OVERLAPS
やPERIOD
句により、時間範囲に基づく制約をPRIMARY KEY
、UNIQUE
、FOREIGN KEY
で定義可能。 - 外部テーブル作成の簡略化:
CREATE FOREIGN TABLE ... LIKE
でローカルテーブル定義を基に外部テーブルを作成可能。
テキスト処理の改善
PG_UNICODE_FAST
コレーションの導入により、Unicodeの大文字小文字変換や比較を高速化。- 新関数
casefold()
により、大文字小文字を無視した比較が容易になった。 - 非決定的コレーションを利用した
LIKE
比較が可能になり、柔軟なパターンマッチングが実現。 - フルテキスト検索にクラスタのデフォルトコレーションを利用するよう変更され、アップグレード後の再インデックスが必要になる場合がある。
認証とセキュリティ
- OAuth 2.0認証を公式サポートし、シングルサインオンとの統合が容易になった。
- FIPSモード検証やTLS v1.3の暗号スイート制御が可能に。
md5
認証は非推奨となり、将来のリリースで削除予定。代替はSCRAM認証である。pgcrypto
でSHA-2ベースのパスワードハッシュがサポートされた。
レプリケーション機能の拡張
- 論理レプリケーションの競合がログおよびビューに報告されるようになった。
CREATE SUBSCRIPTION
がデフォルトで並列ストリーミングを使用。pg_createsubscriber
に--all
フラグが追加され、インスタンス内の全データベースを対象に一括作成可能。- アイドル状態のレプリケーションスロットを自動削除する機能を追加し、WALファイル肥大化を防止。
メンテナンスと監視機能
- VACUUMがより積極的にページを凍結し、長期的なオーバーヘッドを軽減。
EXPLAIN ANALYZE
でバッファアクセス数やインデックスルックアップ数、CPUやWAL統計情報が表示されるようになった。pg_stat_all_tables
にVACUUMやI/Oに関する詳細情報が追加。
PostgreSQLは40年以上にわたり進化を続けており、その機能群は商用データベースを凌駕する部分も多い。今回のPostgreSQL 18は、その堅牢性を維持しつつ、パフォーマンス、開発者体験、セキュリティ、運用性のすべてにおいて進化を遂げたリリースといえる。
詳細はPostgreSQL 18 Released!を参照していただきたい。