AkasicDB 업데이트¶
메이저 버전이 같은 AkasicDB를 업데이트하는 방법을 안내합니다. v2.0.0 → v2.0.1 업데이트를 예로 들어 설명합니다.
목표 릴리즈의 배포를 설치하고 서버를 재시작한 뒤, AkasicDB가 설치된 각 데이터베이스에서 다음 두 명령을 순서대로 실행합니다.
ALTER EXTENSION은 설치한 배포의 기본 버전으로 AkasicDB를 올리고 해당 릴리즈의 관리 함수를 설치하거나 갱신합니다. akasicdb_admin.update()는 데이터베이스에 설치된 AkasicDB 릴리즈에 맞춰 내부 컴포넌트를 갱신합니다. 두 명령이 모두 성공해야 업데이트가 완료됩니다.
적용 대상¶
현재 설치된 버전과 업데이트할 버전의 메이저 버전이 같은 AkasicDB에 적용합니다.
신규 설치는 Installation의 절차를 따릅니다. 목표 릴리즈로 신규 설치한 데이터베이스에는 해당 릴리즈의 컴포넌트가 포함되므로 위 업데이트 명령을 실행할 필요가 없습니다.
업데이트 전에 해당 릴리즈의 WAL 호환성, 복제·복구 조건, 다운그레이드 지원 여부를 확인합니다. 자세한 내용은 릴리즈 노트를 참고해주세요.
v2.0.0에서 상위 패치 버전으로 업데이트할 때
v2.0.0에서 상위 패치 버전으로 업데이트하면 벡터 엔진의 WAL 리소스 매니저 ID가 128에서 160으로 변경됩니다. 기존 바이너리로 PostgreSQL을 정상 종료한 뒤 새 배포를 설치해야 합니다.
v2.0.0에서 기록한 과거 WAL은 자동 변환되지 않습니다. ID 128의 WAL 재생이 필요한 장애 복구, 물리 복제·PITR 전환, 구 바이너리로의 다운그레이드는 이 업데이트 절차의 지원 범위에 포함하지 않습니다.
업데이트 전 확인¶
업데이트할 데이터베이스에 접속하여 PostgreSQL 버전과 설치된 확장 버전을 확인합니다.
SHOW server_version;
SELECT current_database();
SELECT extname, extversion
FROM pg_catalog.pg_extension
ORDER BY extname;
AkasicDB와 업데이트 대상 컴포넌트의 현재 버전이 목표 릴리즈에서 지원하는 시작 버전인지 확인합니다.
업데이트 대상 데이터베이스 목록과 기존 데이터 디렉토리·설정·라이선스 경로를 확인하고, 운영 절차에 따라 백업을 준비합니다. 업데이트 중에는 애플리케이션의 쓰기를 중단합니다.
데이터베이스별 적용
pg_extension 조회 결과는 현재 접속한 데이터베이스의 상태입니다. AkasicDB가 설치된 데이터베이스마다 확인하고 업데이트해야 합니다.
akasicdb-initdb 또는 Docker 이미지로 초기화하여 기본 데이터베이스와 템플릿에도 AkasicDB가 설치된 클러스터는 postgres와 template1을 포함합니다. template1을 업데이트하면 이후 이 템플릿으로 생성한 데이터베이스가 갱신된 확장 버전을 상속합니다. 이미 존재하는 데이터베이스는 각각 업데이트해야 합니다.
목표 릴리즈 배포 설치 및 서버 재시작¶
- 기존 바이너리를 사용하는 PostgreSQL 서버를 정상 종료하고, 종료가 완료되었는지 확인합니다.
- 기존 서버와 동일한 PostgreSQL major 버전 및 에디션의 목표 AkasicDB 릴리즈 배포를 설치합니다. 라이브러리, control 파일, 신규 설치 SQL, 업데이트 SQL을 포함한 전체 배포를 적용합니다.
- 기존 데이터 디렉토리와 설정을 사용하여 PostgreSQL 서버를 시작합니다.
| 배포 방식 | 적용 방법 |
|---|---|
| 바이너리 패키지 | 서버가 종료된 상태에서 목표 릴리즈의 패키지를 설치하고 새 바이너리로 서버를 시작합니다. |
| Docker 이미지 | 기존 서버를 정상 종료한 뒤, 동일 PostgreSQL major 및 에디션의 목표 릴리즈 이미지로 컨테이너를 다시 생성합니다. 기존 데이터 볼륨과 설정·라이선스 마운트를 유지합니다. |
기존 클러스터를 사용하는 업데이트이므로 initdb를 다시 실행하지 않습니다. 설치 경로와 실행 환경 설정은 Installation을 참고합니다.
배포 파일이나 Docker 이미지를 교체하는 것만으로는 기존 데이터베이스의 확장 버전이 바뀌지 않습니다. 기존 데이터 볼륨을 재사용하는 Docker 환경에서도 다음 SQL 단계가 필요합니다. Docker 초기화 스크립트는 데이터 디렉토리가 비어 있을 때만 실행됩니다.
데이터베이스별 업데이트 실행¶
관리자 권한을 가진 계정으로 업데이트할 데이터베이스에 접속합니다. psql을 사용할 경우 아래와 같이 오류 발생 시 실행을 중단하도록 설정하는 것을 권장합니다. 접속 정보는 환경에 맞게 바꿉니다.
설치한 배포의 기본 버전이 업데이트하려는 목표 버전인지 확인합니다.
SELECT name, default_version, installed_version
FROM pg_catalog.pg_available_extensions
WHERE name = 'akasicdb';
default_version은 설치한 control 파일의 기본 버전이며, installed_version은 현재 데이터베이스의 확장 버전입니다. default_version이 목표 버전과 일치하면 다음 두 명령을 순서대로 실행합니다.
각 명령의 역할은 다음과 같습니다.
| 명령 | 실행 결과 |
|---|---|
ALTER EXTENSION akasicdb UPDATE |
AkasicDB를 설치한 배포의 기본 버전으로 올리고 해당 릴리즈의 akasicdb_admin.update() 함수를 설치하거나 갱신합니다. 내부 컴포넌트 갱신은 다음 명령에서 수행합니다. |
SELECT akasicdb_admin.update() |
설치된 AkasicDB 릴리즈가 요구하는 컴포넌트 버전과 바이너리 상태를 검사하고, 내부 컴포넌트를 갱신한 뒤 최종 버전을 확인합니다. |
첫 명령이 성공하면 두 번째 명령까지 실행합니다. 내부 확장의 업데이트는 관리 함수가 수행하므로 사용자가 컴포넌트별 업데이트 SQL을 실행할 필요는 없습니다.
akasicdb_admin.update()는 인자 없이 호출합니다. 같은 릴리즈에서 내부 컴포넌트가 이미 목표 버전이고 바이너리 검사도 통과하면 변경 없이 성공합니다.
두 명령을 순서대로 실행하는 이유
PostgreSQL은 확장 업데이트 스크립트 안에서 다른 확장을 업데이트하는 것을 허용하지 않습니다. 첫 명령에서 해당 릴리즈의 관리 함수를 정의하고, 확장 스크립트 실행이 끝난 다음 명령에서 호출합니다.
목표 버전을 SQL에 직접 지정할 수도 있습니다. 예를 들어 v2.0.1로 업데이트할 때는 첫 명령을 다음과 같이 작성합니다.
완료 확인¶
두 명령의 실행과 커밋이 완료된 뒤 각 데이터베이스에서 확장 버전을 확인합니다.
AkasicDB가 목표 버전이며, 업데이트 대상 내부 컴포넌트가 해당 릴리즈에 명시된 목표 버전인지 확인합니다. 컴포넌트별 목표 버전은 서로 다를 수 있으며, 변경 대상이 아닌 컴포넌트는 기존 버전을 유지할 수 있습니다.
기존 데이터 조회와 인덱스를 사용하는 주요 검색이 정상 동작하는지 확인합니다. 모든 대상 데이터베이스의 업데이트와 확인을 마친 뒤 애플리케이션 쓰기를 재개합니다.