데이터베이스 기능 확인

가끔은 특정 코드 조각이 특정 데이터베이스 버전에서만 작동할 수 있습니다. 가능한 한 그러한 코드를 피하려 노력하지만 때로는 데이터베이스(버전)별 동작을 추가해야 할 때도 있습니다.

이를 용이하게 하기 위해 다음과 같은 사용할 수 있는 메서드가 준비되어 있습니다.

  • ApplicationRecord.database.version: 포맷 X.Y.Z로 PostgreSQL 버전 번호를 문자열로 반환합니다.

이를 통해 다음과 같은 코드를 작성할 수 있습니다.

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? 가드로 감싸야 하며, 읽기 전용 데이터베이스에서 쓰기 작업을 하지 않도록 해야 합니다.

우리는 잠재적으로 쓰기 작업(추가, 갱신, 삭제의 CUD 작업)을 필터링하고 사용자가 데이터베이스를 업데이트하려고 하는 것을 막아 500 오류를 가져오지 않도록 하는 Rails 미들웨어를 갖고 있습니다(Gitlab::Middleware::ReadOnly).