このページは原文を AI が翻訳したものです。
PostgreSQL 18がリリースされ、パフォーマンス(非同期I/Oサブシステム)と開発者の使い勝手において、いくつかの注目すべき改善がもたらされました。
Rails開発者にとって、上流コミュニティはActiveRecordとの互換性を確保するために迅速に対応しました。以下は、Railsアプリケーションに最も関連するハイライトです。
ActiveRecordにおけるRailsサポート
Railsは、PostgreSQL 18をそのままサポートするために、2つの重要なプルリクエストをマージしました:
- **rails/rails#55784**:PostgreSQLアダプタのバージョン検出を更新し、PG18を正しく認識してバージョンの不一致を防ぎます。
- **rails/rails#55142**:PostgreSQL 18の新しい内部OID(オブジェクト識別子)タイプの認識を追加し、ActiveRecordが新しいカラムタイプをスムーズに処理できるようにします。
ネイティブuuidv7()サポート
Railsアプリにとって最もエキサイティングな追加機能は、PostgreSQL 18のネイティブなuuidv7()関数です。
従来、RailsでUUIDを使用するには、次のいずれかが必要でした:
- ランダムなUUIDv4(順序性がないためBツリーインデックスが断片化する)、または
pgcryptoのようなサードパーティ拡張機能や、アプリケーションレベルでUUIDv7を生成するgem。
UUIDv7は識別子の先頭にミリ秒単位のタイムスタンプを埋め込むため、一意性を保ちながらIDを単調にソート可能にします。PostgreSQL 18がコアでuuidv7()をネイティブにサポートすることで:
- 主キーインデックスの挿入はクラスタ化され順序付けられたままになり(Bツリーのページ分割を回避)、
- 時間順のUUIDを生成するために、外部データベース拡張機能やアプリケーションのコールバックが不要になります。
-- In PostgreSQL 18
SELECT uuidv7();その他の注目すべきPG18の変更点
- 非同期I/O(AIO):シーケンシャルおよびビットマップヒープスキャンでの並列I/Oリクエストにより、大規模な分析クエリとバキュームが顕著に高速化されます。
- クエリ最適化:複数列Bツリーインデックスでのスキップスキャンと、GINインデックスの並列ビルドの改善。
- より高速なアップグレード:オプティマイザ統計が
pg_upgradeをまたいで保持され、メジャーバージョンアップ時のウォームアップ遅延が軽減されます。
まとめ
ActiveRecordは最近のパッチによりPG18をすでにクリーンに処理しています。RailsアプリケーションがUUID主キーを使用している、または採用を予定している場合、ネイティブのuuidv7()サポートだけでも、PostgreSQL 18をテストする価値は十分にあります。


コメントを読み込み中…