데이터베이스 기능 확인

때때로 특정 코드 조각은 특정 데이터베이스 버전에서만 작동할 수 있습니다.

우리는 가능한 한 그런 코드를 피하려고 하지만, 때때로 데이터베이스(버전) 특정 동작을 추가하는 것이 필요합니다.

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

  • 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).