PostgreSQL 확장 관리

Tier: Free, Premium, Ultimate Offering: Self-Managed

이 가이드는 외부 PostgreSQL 데이터베이스로 설치된 시스템에서 PostgreSQL 확장을 관리하는 방법을 문서화합니다.

다음 확장을 기본 GitLab 데이터베이스(gitlabhq_production을 기본값으로 함)에 로드해야 합니다:

확장 최소 GitLab 버전
pg_trgm 8.6
btree_gist 13.1
plpgsql 11.7

만약 GitLab Geo를 사용 중이라면, 다음 확장을 모든 보조 추적 데이터베이스(gitlabhq_geo_production을 기본값으로 함)에 로드해야 합니다:

확장 최소 GitLab 버전
plpgsql 9.0

확장을 설치하려면, PostgreSQL은 사용자가 수퍼유저 권한을 가져야 합니다. 일반적으로 GitLab 데이터베이스 사용자는 수퍼유저가 아닙니다. 따라서, 확장을 설치하기 위해서는 일반 데이터베이스 마이그레이션이 아닌 매뉴얼으로 확장을 설치해야 하며, 이는 GitLab을 더 높은 버전으로 업그레이드하기 전에 진행되어야 합니다.

매뉴얼으로 PostgreSQL 확장 설치하기

PostgreSQL 확장을 설치하려면 다음 절차를 따라야 합니다:

  1. 예를 들어, 다음과 같이 수퍼유저를 사용하여 GitLab PostgreSQL 데이터베이스에 연결합니다:

    sudo gitlab-psql -d gitlabhq_production
    
  2. 다음 문서를 사용하여 (btree_gist를 예로 들어) 확장을 설치합니다: CREATE EXTENSION:

    CREATE EXTENSION IF NOT EXISTS btree_gist
    
  3. 설치된 확장을 확인합니다:

     gitlabhq_production=# \dx
                                         설치된 확장 디렉터리
         이름    | 버전 |   스키마   |                            설명
     ------------+---------+------------+-------------------------------------------------------------------
     btree_gist | 1.5     | public     | GiST에 일반 데이터 타입을 인덱싱하는 데 도움
     pg_trgm    | 1.4     | public     | 트리그램을 기반으로 한 텍스트 유사성 메트릭과 인덱스 검색
     plpgsql    | 1.0     | pg_catalog | PL/pgSQL 절차적 언어
     (3 행)
    

시스템에 따라 특정 확장을 사용할 수 있도록 추가 패키지(예: postgresql-contrib)를 설치해야 할 수도 있습니다.

일반적인 실패 시나리오

다음은 확장이 먼저 설치되지 않아 새 GitLab 설치가 실패하는 예입니다.

---- Begin output of "bash"  "/tmp/chef-script20210513-52940-d9b1gs" ----
STDOUT: psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:9: ERROR:  permission denied to create extension "btree_gist"
HINT:  Must be superuser to create this extension.
rake aborted!
failed to execute:
psql -v ON_ERROR_STOP=1 -q -X -f /opt/gitlab/embedded/service/gitlab-rails/db/structure.sql --single-transaction gitlabhq_production

다음은 마이그레이션을 실행하기 전에 확장이 설치되지 않은 상황의 예입니다. 이 시나리오에서 데이터베이스 마이그레이션이 권한이 부족하여 btree_gist 확장을 만들지 못하고 실패합니다.

== 20200515152649 EnableBtreeGistExtension: 마이그레이션 실행 중 =========================
-- execute("CREATE EXTENSION IF NOT EXISTS btree_gist")

GitLab은 데이터베이스 사용자가 확장 'btree_gist''gitlabhq_production' 데이터베이스에 설치해야 하지만
데이터베이스 사용자는 확장을 설치할 수 없습니다.

데이터베이스 슈퍼유저를 사용하여 확장을 매뉴얼으로 설치하거나,

다음을 실행하며 이 문제를 해결할 수 있습니다:
    
    ALTER regular WITH SUPERUSER

이 쿼리를 실행하여 사용자에게 수퍼유저 권한을 부여하면, 데이터베이스 확장이 마이그레이션을 통해 설치될 수 있습니다.

마이그레이션 실패에서 복구하려면, 확장을 수퍼유저에 의해 매뉴얼으로 설치해야 하며, GitLab을 업그레이드하려면 데이터베이스 마이그레이션을 다시 실행해야 합니다:

sudo gitlab-rake db:migrate