データベース機能の検証

時には、特定のコードが特定のデータベースバージョンでしか動作しないことがあります。そのようなコードはできるだけ避けたいのですが、データベース (のバージョン) 固有の動作を追加しなければならないこともあります。

そのために、以下のような方法があります:

  • ApplicationRecord.database.version: PostgreSQLのバージョン番号をX.Y.Z の書式で文字列として返します。

これにより、以下のようなコードを書くことができます:

if ApplicationRecord.database.version.to_f >= 11.7
  run_really_fast_query
else
  run_fast_query
end

読み取り専用データベース

データベースは読み込み専用モードで使用できます。この場合、すべての GET リクエストがデータベースへの書き込みオペレーションを試みないようにしなければなりません。これらのリクエストのうちのひとつがデータベースに書き込みたい場合は、Gitlab::Database.read_only? あるいはGitlab::Database.read_write? ガードでラップする必要があります。

Railsミドルウェアでは、書き込みの可能性があるオペレーション(CRUDのCUD オペレーション)をフィルタリングして、ユーザーがデータベースを更新しようとして500エラーになるのを防ぎます(Gitlab::Middleware::ReadOnly を参照)。