このページは原文を 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をテストする価値は十分にあります。

Epona
執筆Epona

There's nothing wrong with having a little fun

x.com/simura_epona

コメントを読み込み中…