Active RecordのPostgreSQL最小バージョン要件を9.3から9.5に引き上げ

rails/rails

#55654で導入されたarray_position関数の使用により、PostgreSQLの実質的な最小要件が9.5に上昇していたため、バージョンチェックとドキュメントをその実態に合わせて修正しました。

背景

Active RecordのPostgreSQLアダプターには、接続時にデータベースバージョンを検証する仕組みが備わっていますが、コードが依存するPostgreSQL機能の要件とチェック基準が乖離していました。コミット c93d1b0#55654)でプライマリキー取得の最適化が行われた際、PostgreSQL 9.5で追加された array_position 関数が利用されるようになりました。しかし、バージョンチェックのしきい値は9.3のままでした。

この状態では、9.3〜9.4のPostgreSQLへの接続時にバージョンチェックを通過しながら、array_positionを含む処理で実行時エラーが発生するという矛盾が生じていました。本PRはこの不整合を解消します。

技術的な変更

変更の核心は check_version メソッドのしきい値更新です。postgresql_adapter.rb の1箇所と、ドキュメント3箇所が一括して修正されています。

変更前:

def check_version # :nodoc:
  if database_version < 9_03_00 # < 9.3
    raise "Your version of PostgreSQL (#{database_version}) is too old. Active Record supports PostgreSQL >= 9.3."
  end
end

変更後:

def check_version # :nodoc:
  if database_version < 9_05_00 # < 9.5
    raise "Your version of PostgreSQL (#{database_version}) is too old. Active Record supports PostgreSQL >= 9.5."
  end
end

ドキュメント側では、guides/source/active_record_postgresql.mdguides/source/command_line.md、および railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt(アプリ生成時のデータベース設定テンプレート)のバージョン表記がそれぞれ9.3から9.5に更新されています。これにより、新規プロジェクトの雛形ファイルにも正確な要件が反映されます。

設計判断

コードの実態に合わせてバリデーションを厳格化するという方針が採られました。

array_positionが導入された時点で最小バージョン要件も同時に引き上げるべきでしたが、#55654ではその対応が漏れていました。本PRはその後追い修正として、ランタイムエラーよりも早い接続確立フェーズで明示的なエラーを出す状態へと修正しています。コード変更はしきい値の数値のみであり、チェックロジック自体の変更はありません。

まとめ

本PRは、実際に依存している機能のバージョン要件とバリデーションのしきい値を一致させた整合性修正です。バージョンチェックは「使用している機能の最低要件を正確に反映すべき」という原則を示しており、機能追加時に依存する外部コンポーネントの要件更新を同時に行う重要性を改めて示す変更といえます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
a112edfd

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「リード文→背景→技術的な変更→設計判断→まとめ」という構成が明確で、ガイドラインの「総論→各論→結論」を忠実に満たしています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:path)や、PR番号([#123])、コミットID([abc1234])のリンク記法がすべて正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

Active RecordやPostgreSQLアダプターに関する専門的な内容を、冗長な説明なしに記述しており、対象読者であるエンジニアに最適化されています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論の構成になっており、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られています。可読性が非常に高いです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているコード(変更前・変更後)は、提供されたDiff情報と完全に一致しています。ファイルパスの指定も正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Active Record」「PostgreSQLアダプター」「array_position」などの技術用語が、PRの文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「array_position」関数の導入により生じたバージョン要件の不整合という、変更の背景にある技術的な因果関係を正確かつ論理的に説明できています。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張(`array_position`の導入経緯、関連PR番号など)は、提供されたPRのDescriptionやDiffによって裏付けられており、ハルシネーションは見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#55654, #56911)、バージョン番号(9.3, 9.5)、コミットID(c93d1b0)などの数値・固有名詞はすべて正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルはPR「array_position requires PostgreSQL 9.5」の本質的な結果(最小要件の引き上げ)を的確に要約しており、内容との整合性が取れています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事に含まれる知識はすべてPR情報から導出できる範囲内にあり、PRに記載のないバージョンサポート状況やリリース日程などの外部知識は含まれていません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

過去の変更(`array_position`の導入)と今回の修正の関係性を、「〜していました」といった表現で正確に記述しており、時間的な歪曲はありません。