Amazon Relational Database Service
사용 설명서 (API 버전 2014-10-31)

Amazon RDS용 PostgreSQL DB 엔진 업그레이드

Amazon RDS에서 새 데이터베이스 엔진 버전을 지원하는 경우, DB 인스턴스를 새 버전으로 업그레이드할 수 있습니다. PostgreSQL DB 인스턴스의 업그레이드에는 메이저 버전 업그레이드와 마이너 버전 업그레이드라는 두 가지 업그레이드가 있습니다.

메이저 버전 업그레이드에는 기존 애플리케이션과 호환되지 않는 데이터베이스 변경 사항이 포함될 수 있습니다. 따라서 DB 인스턴스의 메이저 버전 업그레이드를 수동으로 수행해야 합니다. DB 인스턴스를 수정하여 메이저 버전 업그레이드를 시작할 수 있습니다. 그러나 주 버전 업그레이드를 수행하기 전에 PostgreSQL 메이저 버전 업그레이드에 설명된 단계를 수행하는 것이 좋습니다.

반대로 마이너 버전 업그레이드에는 기존 애플리케이션과 호환되는 변경 사항만 포함됩니다. DB 인스턴스를 수정하여 마이너 버전 업그레이드를 수동으로 시작할 수 있습니다. 또는 DB 인스턴스를 생성하거나 수정할 때 마이너 버전 자동 업그레이드 옵션을 활성화할 수 있습니다. 이렇게 하면 Amazon RDS에서 새 버전을 테스트 및 승인한 후 DB 인스턴스가 자동으로 업그레이드됩니다. 자세한 내용은 PostgreSQL 마이너 버전 자동 업그레이드 단원을 참조하십시오.

PostgreSQL 업그레이드 개요

DB 인스턴스를 안전하게 업그레이드하기 위해 Amazon RDS는 PostgreSQL 설명서에 있는 pg_upgrade 유틸리티를 사용합니다.

백업 보존 기간이 0보다 큰 경우 업그레이드 프로세스 중에 Amazon RDS가 두 개의 DB 스냅샷을 사용합니다. 첫 번째 DB 스냅샷은 업그레이드 변경 이전 DB 인스턴스의 스냅샷입니다. 업그레이드가 데이터베이스에 맞지 않는 경우에는 이 스냅샷을 복구하여 이전 버전의 DB 인스턴스를 생성할 수 있습니다. 두 번째 DB 스냅샷은 업그레이드 완료 이후에 캡처됩니다.

참고

DB 인스턴스에 대한 백업 보존 기간을 0보다 큰 수로 설정하는 경우에만 Amazon RDS가 업그레이드 프로세스 중에 DB 스냅샷을 캡처합니다. 백업 보존 기간을 변경하려면 PostgreSQL 데이터베이스 엔진을 실행 중인 DB 인스턴스 수정 단원을 참조하십시오.

DB 인스턴스를 다중 AZ 배포로 생성한 경우에는 기본 라이터 DB 인스턴스와 예비 DB 인스턴스가 모두 업그레이드됩니다. 라이터 DB 인스턴스와 예비 DB 인스턴스가 모두 동시에 업그레이드되므로 업그레이드가 끝날 때까지 작동 중단을 겪게 됩니다.

업그레이드가 완료되면 이전 버전의 데이터베이스 엔진으로 되돌릴 수 없습니다. 이때 이전 버전으로 되돌리려면 업그레이드 전에 캡처한 DB 스냅샷을 복구하여 새로운 DB 인스턴스를 생성해야 합니다.

PostgreSQL 업그레이드는 PostgreSQL 확장 버전을 업그레이드하지 않습니다. 확장 버전을 업그레이드하려면 ALTER EXTENSION UPDATE 명령을 사용합니다. 예를 들어, PostgreSQL DB 엔진을 9.4.x에서 9.5.12로 업그레이드할 때 PostGIS를 업그레이드하려면 다음 명령을 실행합니다.

ALTER EXTENSION POSTGIS UPDATE TO '2.2.5'

지원되는 PostgreSQL 확장 버전 목록은 Amazon RDS에서 지원되는 PostgreSQL 확장 기능 및 모듈 단원을 참조하십시오.

참고

Amazon RDS PostgreSQL DB 인스턴스에서 PostGIS 확장 버전을 실행하는 경우 업그레이드하기 전에 PostGIS 설명서의 PostGIS 업그레이드 지침을 따르십시오.

PostgreSQL 메이저 버전 업그레이드

메이저 버전 업그레이드에는 이전 버전의 데이터베이스와 호환되지 않는 데이터베이스 변경 사항이 포함될 수 있습니다. 이 기능을 사용하면 기존 애플리케이션이 올바르게 작동하지 않을 수 있습니다.

따라서 Amazon RDS는 자동으로 메이저 버전 업그레이드를 적용하지 않습니다. 메이저 버전 업그레이드를 수행하려면 DB 인스턴스를 수동으로 수정합니다. 모든 업그레이드는 프로덕션 DB 인스턴스에 적용하기 전에 철저하게 테스트하여 애플리케이션이 올바르게 작동하는지 확인해야 합니다. PostgreSQL 메이저 버전 업그레이드를 수행할 때 메이저 버전 업그레이드를 수행하는 방법에 설명된 단계를 따르는 것이 좋습니다.

읽기 전용 복제본은 메이저 버전 업그레이드를 수행할 수 없지만 읽기 전용 복제본의 원본 인스턴스는 가능합니다. 읽기 전용 복제본의 원본 인스턴스가 메이저 버전 업그레이드를 거치면 해당 원본 인스턴스의 모든 읽기 전용 복제본은 이전 엔진 버전으로 유지됩니다. 이 경우 읽기 전용 복제본은 원본 인스턴스에서 수행된 변경 사항을 더 이상 복제할 수 없습니다. 인스턴스가 다른 메이저 버전으로 업그레이드된 이후에는 읽기 전용 복제본을 승격하거나, 삭제한 후 다시 만드는 것이 좋습니다. 자세한 내용은 PostgreSQL 읽기 전용 복제본 작업 단원을 참조하십시오.

여러 메이저 버전 선택

PostgreSQL 데이터베이스를 다음 메이저 버전으로 업그레이드할 수 있습니다. 일부 PostgreSQL 데이터베이스 버전에서는 업그레이드할 때 상위 메이저 버전으로 건너뛸 수 있습니다. 다음 표에는 원본 PostgreSQL 데이터베이스 버전과 업그레이드에 사용할 수 있도록 연결된 대상 메이저 버전을 나열되어 있습니다.

소스 버전 메이저 버전 대상 추가 메이저 버전 대상(PostGIS 확장 없음)
9.3.x 9.4.x
9.3.23 9.4.x, 9.5.13 9.6.9
9.3.24 9.4.x, 9.5.14 9.6.10
9.3.25 9.4.x, 9.5.15 9.6.11
9.4.x 9.5.x
9.4.20 9.5.x 11.1
9.4.21 9.5.x 10.7, 11.2
9.5.x 9.6.x
9.5.15 9.6.x 11.1
9.5.16 9.6.x 10.7, 11.2
9.6.x 10.x
9.6.11 10.x 11.1
9.6.12 10.x 11.2
10.x 11.x

중요

업그레이드 대상은 원본 마이너 버전 이상과 동시에 릴리스된 상위 버전으로 활성화됩니다.

데이터베이스에서 PostGIS 확장을 사용하는 경우 일부 원본에서 대상 조합으로 메이저 버전을 건너뛸 수 없습니다. 이러한 상황에서는 원하는 대상 버전에 도달할 때까지 단계별로 다음 메이저 버전으로 업그레이드하십시오.

메이저 버전 업그레이드를 수행하는 방법

Amazon RDS PostgreSQL DB 인스턴스를 업그레이드할 때는 다음 프로세스를 따르는 것이 좋습니다.

  • 버전 호환 가능 파라미터 그룹 준비 – 사용자 지정 파라미터 그룹을 사용하는 경우 두 가지 옵션이 있습니다. 새 DB 엔진 버전에 대한 기본 파라미터 그룹을 지정할 수 있습니다. 또는 새 DB 엔진 버전에 대한 사용자 지정 파라미터 그룹을 직접 만들 수도 있습니다.

    새 파라미터 그룹을 DB 인스턴스와 연결하려면 업그레이드가 완료된 후 데이터베이스를 재부팅하십시오. 파라미터 그룹 변경 사항을 적용하기 위해 인스턴스를 재부팅해야 하는 경우, 인스턴스의 파라미터 그룹 상태가 pending-reboot로 표시됩니다. 인스턴스의 파라미터 그룹 상태는 콘솔에서 보거나 describe-db-instances 같은 describe 명령을 사용하여 볼 수 있습니다.

  • 지원되지 않는 사용 확인:

    • 준비된 트랜잭션 – 업그레이드하기 전에 열려 있는 준비된 트랜잭션을 모두 커밋하거나 롤백합니다.

      다음 쿼리를 사용하여 인스턴스에 열려 있는 준비된 트랜잭션이 없음을 확인할 수 있습니다.

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • 행 데이터 유형 – RDS PostgreSQL 9.3 인스턴스를 업그레이드하는 경우 업그레이드를 시도하기 전에 line 데이터 형식의 사용을 모두 제거하십시오. PostgreSQL 버전 9.4 이하에는 line 데이터 형식이 완전히 구현되지 않았습니다.

      line 데이터 형식이 사용되지 않음을 확인하려면 업그레이드할 각 데이터베이스에서 다음 쿼리를 사용합니다.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid = 'pg_catalog.line'::pg_catalog.regtype AND c.relnamespace = n.oid AND n.nspname !~ '^pg_temp_' AND n.nspname !~ '^pg_toast_temp_' AND n.nspname NOT IN ('pg_catalog', 'information_schema');

      참고

      인스턴스의 모든 데이터베이스를 나열하려면 다음 쿼리를 사용합니다.

      SELECT d.datname FROM pg_catalog.pg_database d WHERE d.datallowconn = true;
    • Reg* 데이터 형식 – 업그레이드를 시도하기 전에 reg* 데이터 형식의 사용을 모두 제거하십시오. regtyperegclass 이외에는 reg* 데이터 형식을 업그레이드할 수 없습니다. pg_upgrade 유틸리티는 Amazon RDS에서 업그레이드를 수행하는 데 사용하는 이 데이터 형식을 유지할 수 없습니다.

      지원되지 않는 reg* 데이터 형식이 사용되지 않음을 확인하려면 각 데이터베이스에 다음 쿼리를 사용합니다.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  • VACUUM 수행 – 가동 중단을 줄이려면 DB 인스턴스를 업그레이드하기 전에 VACUUM 작업을 수행하십시오. VACUUM 작업을 수행하지 않으면 업그레이드 프로세스가 오래 걸릴 수 있습니다. 다른 메이저 버전으로 업그레이드할 때 pg_upgrade 유틸리티는 각 데이터베이스를 vacuum하기 때문입니다.

  • 백업 수행 – 메이저 버전 업그레이드를 하기 전에 백업을 수행하여 데이터베이스에 대해 알려진 복원 지점을 생성하는 것이 좋습니다. 백업 보존 기간이 0보다 큰 경우 업그레이드 프로세스는 업그레이드 전과 후에 DB 인스턴스의 DB 스냅샷을 생성합니다. 백업 보존 기간을 변경하려면 PostgreSQL 데이터베이스 엔진을 실행 중인 DB 인스턴스 수정 단원을 참조하십시오. 백업을 수동으로 수행하려면 DB 스냅샷 생성 단원을 참조하십시오.

  • 프로덕션 테스트 실행 – 데이터베이스에서 메이저 버전 업그레이드를 수행하기 전에 프로덕션 데이터베이스의 복제본에서 메이저 버전 업그레이드를 테스트하는 것이 좋습니다. 중복 테스트 인스턴스를 만들려면 최근 스냅샷에서 데이터베이스를 복원하거나 데이터베이스를 최근 복원 가능 시간으로 시점 복원할 수 있습니다. 자세한 내용은 스냅샷에서 복구 또는 DB 인스턴스를 지정된 시간으로 복원 단원을 참조하십시오. 업그레이드 수행에 대한 자세한 내용은 엔진 버전 수동 업그레이드 단원을 참조하십시오.

  • 프로덕션 인스턴스 업그레이드 – 메이저 버전 업그레이드의 테스트 실행이 성공한 경우 확신을 가지고 프로덕션 데이터베이스를 업그레이드해도 됩니다. 자세한 내용은 엔진 버전 수동 업그레이드 단원을 참조하십시오.

참고

업그레이드 프로세스 중에 인스턴스를 특정 시점으로 복원할 수 없습니다. Amazon RDS가 업그레이드를 수행하면 인스턴스 자동 백업이 수행됩니다. 업그레이드를 시작하기 이전의 시간이나 인스턴스 자동 백업을 완료한 이후의 시간으로 시점 복원을 수행할 수 있습니다.

진행 중인 업그레이드에 대한 정보는 Amazon RDS를 사용하여 pg_upgrade 유틸리티가 생성하는 두 개의 로그인 pg_upgrade_internal.logpg_upgrade_server.log를 볼 수 있습니다. Amazon RDS는 이러한 로그의 파일 이름에 타임스탬프를 추가합니다. 다른 로그와 마찬가지로 이러한 로그를 볼 수 있습니다. 자세한 내용은 Amazon RDS 데이터베이스 로그 파일 단원을 참조하십시오.

메이저 버전 업그레이드 중에 publictemplate1 데이터베이스와 인스턴스의 모든 데이터베이스에 있는 public 스키마의 이름이 일시적으로 변경됩니다. 이러한 객체는 원래 이름 뒤에 임의의 문자열이 추가된 상태로 로그에 표시됩니다. 그러면 localeowner와 같은 사용자 정의 설정이 메이저 버전 업그레이드 중에 유지되도록 문자열이 추가됩니다. 업그레이드가 완료되면 객체의 이름이 원래 이름으로 다시 변경됩니다.

참고

업그레이드를 완료한 후에는 ANALYZE 작업을 실행해 pg_statistic 테이블을 새로 고쳐야 합니다.

메이저 버전 업그레이드를 완료한 후 비슷한 워크로드로 업그레이드된 데이터베이스에서 애플리케이션을 테스트하여 모든 것이 예상대로 작동하는지 확인해 보십시오. 업그레이드를 확인한 후 이 테스트 인스턴스를 삭제할 수 있습니다.

PostgreSQL 마이너 버전 자동 업그레이드

DB 인스턴스를 생성하거나 수정할 때 마이너 버전 자동 업그레이드 옵션을 활성화하면 자동으로 인스턴스가 업그레이드될 수 있습니다. Amazon RDS에 의해 마이너 업그레이드가 테스트되고 승인된 후에는 마이너 버전 업그레이드가 자동으로 수행됩니다. 자세한 내용은 마이너 엔진 버전 자동 업그레이드 단원을 참조하십시오. 마이너 버전 업그레이드를 수동으로 수행하려면 엔진 버전 수동 업그레이드 단원을 참조하십시오.

PostgreSQL DB 인스턴스가 읽기 전용 복제본을 사용하는 경우 원본 인스턴스를 업그레이드하기 전에 읽기 전용 복제본부터 모두 업그레이드해야 합니다. DB 인스턴스를 다중 AZ 배포로 생성한 경우에는 라이터 복제본과 예비 복제본이 모두 업그레이드되어 업그레이드가 끝날 때까지 인스턴스를 사용할 수 없습니다.