새 주 버전으로 업그레이드

Databases for PostgreSQL 다음과 같이 세 가지의 서로 다른 업그레이드 경로를 제공합니다:

  • 새로운 주요 버전으로의 인플레이스 업그레이드.
  • 백업에서 복원 중입니다.
  • 읽기 전용 복제본에서 업그레이드하기.

데이터베이스의 주요 버전이 지원 종료(EOL) 시점이 다가오면, 최신 주요 버전으로 업그레이드하는 것이 좋습니다.

IBM Cloud 카탈로그 페이지에서 Databases for PostgreSQL 의 사용 가능한 버전을 확인하거나, Cloud Databases CLI 플러그인 명령어 ibmcloud cdb deployables-show, 또는 Cloud Databases API /deployables 엔드포인트를 통해 확인할 수 있습니다.

새로운 인스턴스로 업그레이드할 때는 애플리케이션의 연결 정보도 변경해야 합니다.

다음 예제 명령어에서, {id} 을 사용하려면 데이터베이스 인스턴스의 전체 CRN이 필요합니다. CRN에는 특수 문자가 포함되어 있으므로, “not_found” 오류가 발생하지 않도록 URL 인코딩을 적용해야 합니다.

PostgreSQL 의 최신 주요 버전으로 업그레이드하기 위한 요구 사항

주요 버전 업그레이드 과정을 시작하기 전에, 먼저 유지 관리해야 할 모든 확장 기능, 복제 개체 및 애플리케이션 종속성을 검토하십시오.

일부 확장 기능 및 논리적 복제 개체는 특정 버전에만 적용되거나, ‘ PostgreSQL ’의 주요 버전과 일치해야 하는 서버 측 구성 요소에 의존합니다. 업그레이드 전에 이러한 개체를 제거하면 오류를 방지할 수 있으며, 새 버전이 실행된 후 지원되는 개체만 다시 생성할 수 있습니다.

검토해야 할 확장 기능 및 논리적 복제 개체

업그레이드 전에 다음 사항을 확인하십시오:

확장기능

  • pg_repack
  • old_snapshot
  • wal2json
  • anon
  • PostGIS

복제 슬롯

  • Logical replication slots

애플리케이션 종속성 애플리케이션이 의존하는 확장 기능이나 복제 개체를 제거하는 경우, 업그레이드를 진행하기 전에 데이터 흐름과 애플리케이션 동작을 확인하십시오. 또한 특정 PostgreSQL 기능에 의존하는 애플리케이션 로직에 발생할 수 있는 장애 가능성도 고려하십시오.

pg_repack

업그레이드 전에 pg_repack 를 삭제하고, 업그레이드 후에 다시 생성하십시오. pg_repack 는 버전별 확장자를 사용하며, 클라이언트/서버 구성 요소는 PostgreSQL 의 주요 버전과 일치해야 합니다.

DROP EXTENSION pg_repack;

업그레이드 후에도 해당 확장 기능이 여전히 필요한 경우에만 이를 다시 생성하십시오.

CREATE EXTENSION pg_repack;

old_snapshot

업그레이드 전에 old_snapshot 를 삭제하십시오. PostgreSQL 18로 업그레이드한 후에는 더 이상 지원되지 않으므로 이를 다시 생성 하지 마십시오.

DROP EXTENSION old_snapshot;

wal2json 복제 슬롯

wal2json 를 논리적 디코딩에 사용하는 경우, 업그레이드 전에 관련 복제 슬롯을 모두 삭제해야 합니다. pg_upgrade 유틸리티는 복제 슬롯이 존재하는 동안 주요 버전 업그레이드를 엄격히 금지하며, 이 경우 치명적인 오류를 발생시키고 업그레이드를 중단합니다.

업그레이드 전:

  1. 보류 중인 모든 WAL 데이터가 처리되었는지 확인하십시오.
  2. 복제 슬롯을 사용하는 애플리케이션을 중지하십시오.
  3. 복제 슬롯을 삭제하십시오:
SELECT pg_drop_replication_slot('your_slot_name');

업그레이드 후에는 필요에 따라 복제 슬롯을 다시 생성할 수 있습니다. wal2jsonCREATE EXTENSION 를 통해 설치되는 것이 아니라, 데이터베이스 매개변수(wal_level, max_replication_slots, max_wal_senders) 및 테이블 권한을 통해 구성되며, 이러한 설정은 업그레이드를 방해하지 않는다는 점에 유의하십시오.

anon

업그레이드 전에 ‘ anon ’ 확장 프로그램을 제거하고, 업그레이드 후에도 여전히 필요한 경우 다시 활성화하십시오. anon 를 삭제하기 전에 몇 가지 추가 절차가 필요합니다.

anon 확장 프로그램이 설치되어 있는 경우, 업그레이드를 수행하기 전에 아래 단계를 따르고 관리자 권한으로 명령어를 실행하십시오.

  1. (활성화된 경우) 모든 마스킹 규칙을 제거합니다.

    SELECT anon.remove_masks_for_all_columns();
    
  2. 마스크된 역할 비활성화 (마스크된 역할이 있는 경우 업그레이드가 실패할 수 있습니다).

    SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;
    
  3. cascade 옵션을 사용하여 anon 확장자를 제거하십시오.

    DROP EXTENSION anon CASCADE;
    
  4. anon 확장 기능이 인스턴스 내의 여러 데이터베이스에 설치된 경우, 각 데이터베이스에 대해 설명된 단계를 따르십시오.

  5. 업그레이드가 완료된 후, ‘ anon ’ 확장 기능을 다시 활성화하고 필요에 따라 마스킹 규칙을 다시 적용하십시오.

업그레이드를 수행하기 전에 마스킹의 일관성을 보장하기 위해, 확장자를 삭제하기 전과 후 모두 데이터를 검증할 것을 강력히 권장합니다.

PostGIS

PostGIS, 를 사용 중이라면, PostgreSQL 을 업그레이드하기 전에 먼저 PostGIS 을 업그레이드하십시오.

SELECT postgis_extensions_upgrade();

다음 쿼리를 사용하여 ‘ PostGIS ’ 확장 프로그램의 업그레이드 상태를 확인하십시오.

SELECT postgis_full_version();

Logical replication slots

업그레이드 전에 모든 논리적 복제 슬롯을 삭제하고, 업그레이드 후에 다시 생성하십시오. 논리적 슬롯은 소스 서버의 상태와 연동되어 있으므로, 업그레이드된 인스턴스에서 완전히 새로 생성해야 합니다.

SELECT pg_drop_replication_slot('<slot_name>');

현행 환경에서의 주요 버전 업그레이드

현장 주요 버전 업그레이드(IPU)를 사용하면 백업을 복원하여 새로운 배포 환경을 생성할 필요 없이, 배포 환경을 지원되는 대상 /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions으로 업그레이드할 수 있습니다. 이번 업그레이드에서는 기존 연결 문자열이 그대로 유지되므로 재설정이 필요하지 않습니다.

다만, 새 버전에서 호환성 문제가 발생할 경우 애플리케이션을 수정해야 할 수도 있습니다.

업그레이드 기간 동안 배포 시스템이 잠시 중단됩니다. 소요 시간은 배포의 규모와 복잡성에 따라 달라집니다.

업그레이드 중에도 애플리케이션에서 계속 데이터를 읽어야 하는 경우, /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision을 프로비저닝하고, 애플리케이션이 해당 복제본을 사용하도록 업데이트할 수 있습니다. 업그레이드가 성공적으로 완료되지 않은 경우, 복제본을 주 서버로 승격시킬 수 있습니다. 자세한 내용은 /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu를 참조하십시오.

Databases for PostgreSQL 현장 주요 버전 업그레이드 전후에 자동으로 백업을 생성하지 않습니다.

복구 가능성을 높이기 위해 다음을 생성하십시오:

  • 업그레이드 전에 현재 데이터 상태를 보호하기 위한 백업
  • 새 버전으로 업그레이드한 직후 백업을 수행하여 첫 번째 복원 지점을 설정합니다

업그레이드 후 백업을 수행하지 않으면, 다음 예약된 백업이 완료될 때까지 새 버전에서 시점 복원(PITR) 기능을 사용할 수 없습니다.

업그레이드 전에 생성된 백업 및 PITR 지점은 이전 버전과 연결된 상태로 유지되며, 업그레이드된 버전으로 복원할 수 없습니다. 하지만, 이를 통해 이전 버전을 새로운 배포 환경으로 복원하는 데 여전히 활용할 수 있습니다.

논리적 복제 슬롯

업그레이드 전에 모든 논리적 복제 슬롯을 삭제하고, 업그레이드 후에 다시 생성하십시오. 논리적 복제 슬롯은 소스 서버의 상태와 연동되어 있으므로, 업그레이드된 인스턴스에서 다시 생성해야 합니다.

SELECT pg_drop_replication_slot('<slot_name>');

시작하기 전에

업그레이드를 시작하기 전에 다음 사항을 확인하십시오:

  • UI, API, CLI 또는 Terraform을 사용하여 현재 배포 환경에서 버전 업그레이드가 지원되는지 확인하십시오.

    예시 (CLI):

    ibmcloud cdb capability-show versions postgresql
    
  • 사전 확인 요건을 검토하십시오. 이 업그레이드는 소스 배포 환경에서 실행되며, 위험 요소가 감지될 경우 차단됩니다. 다음을 확인하십시오.

    • 배포 상태는 양호합니다
    • 사용 가능한 디스크 공간이 최소 10% 이상 남아 있어야 합니다
    • I/O 사용률이 90% 미만입니다
    • 스키마 크기와 객체 수는 지원되는 한도 내에 있습니다
    • 필수 확장 및 논리적 복제 슬롯 정리가 완료되었습니다
  • 응용 프로그램에 영향을 미칠 수 있는 호환성 변경 사항에 대해서는 ‘ https://www.postgresql.org/docs/release/ ’을 확인하십시오.

  • 이전 버전으로 다운그레이드하는 기능은 지원되지 않습니다.

  • 인플레이스 업그레이드는 일단 시작되면 취소할 수 없습니다.

  • 업그레이드하기 전에 최신 백업이 준비되어 있는지 확인하십시오.

다음에 대해 지원되는 현장 업그레이드 경로: Gen2
출처 PostgreSQL 버전 지원되는 현장 업그레이드 대상
18 향후 주요 버전 (출시 시)

Gen2 PostgreSQL 18에서 시작합니다. 지원 대상이 되는 대로 최신 버전으로의 업그레이드 경로가 추가됩니다. 이전 버전(14–17)에 대해서는 /docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading을 참조하십시오.

업그레이드가 완료되면 배포 환경에서는 새로운 PostgreSQL 메이저 버전이 실행됩니다. 업그레이드 이전의 백업 및 PITR 지점은 이전 버전의 타임라인에 속하므로, 업그레이드된 버전으로 복원할 수 없습니다.

새 버전에서 복원 및 PITR 기능을 유지하려면, 업그레이드 직후 백업을 수행하십시오. 이 백업은 향후 복구 작업의 기준이 됩니다.

업그레이드가 실패하더라도, 업그레이드 이전 시점의 백업을 PITR을 통해 활용하여 이전 버전을 새로운 배포 환경에 복원할 수 있습니다.

UI에서 업그레이드

  1. 동일한 버전의 기존 배포 환경에서 백업을 복원하여 테스트 배포 환경을 생성합니다.

  2. 스테이징 애플리케이션을 업데이트하여 테스트 배포를 사용하고 기능을 검증하십시오.

  3. 개요 페이지에서 ‘메인 버전 업그레이드’를 클릭하여 업그레이드를 시작하세요.

  4. 업그레이드된 테스트 배포 환경에서 애플리케이션의 동작을 검증하십시오.

  5. 검증이 완료되면 프로덕션 배포를 업그레이드하십시오.

    업그레이드가 시작되면 중지하거나 롤백할 수 없습니다. 최신 백업이 준비되어 있는지 확인하십시오.

업그레이드 시작 만료 시간은 업그레이드 작업이 자동으로 취소되기 전에 시작되어야 하는 기한을 의미합니다. 이 값은 유지보수 가능 시간대에 따라 설정하십시오. 예를 들어, 업그레이드 시간이 30분이고 허용 시간이 1시간이라면, 만료 시간을 30분으로 설정하세요. 만료 기간은 5분에서 24시간 사이로 설정할 수 있습니다.

API를 통한 업그레이드

다음 요청을 사용하여 인플레이스 업그레이드를 시작하십시오:

curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
  -d '{"version": "15"}'

자세한 내용은 ‘ Cloud Databases ’ API 를 참조하십시오.

CLI를 통한 업그레이드

0.20.0 이상의 CDB 플러그인 버전에서 사용할 수 있습니다.

사용 가능한 업그레이드 경로를 확인하려면:

ibmcloud cdb deployment-capability-show <NAME|CRN> versions

업그레이드를 시작하려면:

ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>

명령어에 대한 자세한 내용은 다음과 같습니다:

ibmcloud cdb deployment-version-upgrade --help

만료 시간을 설정하려면 --expire-in 또는 --expire-at 중 하나를 사용하십시오.

Terraform을 통한 업그레이드

Terraform 프로바이더 버전 1.79.2 이상에서 사용할 수 있습니다.

업그레이드하려면 구성 파일에서 version 값을 업데이트하십시오.

업그레이드 전에 백업을 생략하면, 업그레이드가 실패할 경우 데이터 손실이 발생할 수 있습니다. 최신 백업이 준비되어 있는지 확인하십시오.

Terraform은 만료 타임스탬프 대신 타임아웃을 사용하므로, 필요한 경우 타임아웃 시간을 늘리십시오.

문제점 해결

업그레이드가 성공적으로 완료된 후 문제가 발생하여 이전 버전으로 되돌려야 하는 경우, IBM Cloud® 지원팀에 문의하여 안내를 받으시기 바랍니다. 지침 없이 PITR 또는 복원 작업을 수행하지 마십시오. 이는 복구 과정을 복잡하게 만들 수 있습니다.

업그레이드는 모든 사전 검사가 통과된 후에만 실행됩니다. 업그레이드가 차단된 경우 다음 사항을 확인하십시오:

  • 클러스터 상태 (Patroni 상태가 안정적임)
  • 충분한 여유 디스크 공간
  • 허용 가능한 디스크 I/O 사용률
  • 스키마 크기 및 객체 수 제한

스키마 규모가 크거나 객체 수가 많으면 업그레이드 소요 시간이 늘어날 수 있습니다.

업그레이드 시도가 계속 실패할 경우, https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter 을 통해 지원 티켓을 제출해 주십시오.

읽기 전용 복제본에서 업그레이드

읽기 전용 복제본을 구성하여 업그레이드하십시오. 배포 환경과 동일한 데이터베이스 버전을 가진 읽기 전용 복제본을 프로비저닝하고, 모든 데이터가 복제될 때까지 기다리십시오. 배포와 그 복제본이 동기화되면, 읽기 전용 복제본을 새로운 버전의 데이터베이스를 실행하는 완전한 독립형 배포로 승격 및 업그레이드하십시오. 업그레이드 및 승격 단계를 수행하려면, 요청 본문에 /deployments/{id}/remotes/promotion 업그레이드하려는 버전을 요청 본문에 포함하여 해당 엔드포인트로 POST 요청을 보내십시오.

이 요청은 다음과 같습니다:

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{
    "promotion": {
        "version": "14",
        "skip_initial_backup": false
    }
}' \

skip_initial_backup은 선택사항입니다. true로 설정된 경우 새 배치가 승격을 완료한 후 초기 백업을 작성하지 않습니다. 더 짧은 시간 내에 새 배치를 사용할 수 있지만 대신 다음 자동 백업이 실행되거나 On-Demand 백업을 작성할 때까지 백업되지 않습니다.

승격 및 업그레이드 시범 실행

주요 버전 업그레이드의 영향을 평가하려면 모의 실행을 수행하십시오. 모의 실행은 승진 및 승급 과정을 시뮬레이션하며, 그 결과는 데이터베이스 로그에 기록됩니다. 로그 분석 통합 기능을 통해 데이터베이스 로그에 액세스하고 확인하세요. 이를 통해 현재 사용 중인 버전과 해당 확장 기능을 포함하는 버전을 원하는 버전으로 성공적으로 업그레이드할 수 있습니다.

시범 실행은 skip_initial_backupfalse로 설정되고 version이 정의된 상태에서만 실행해야 합니다.

명령어는 다음과 같습니다:

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{
    "promotion": {
        "version": "14",
        "skip_initial_backup": false,
        "dry_run": true
    }
}' \

업그레이드 시 백업 및 복원

새로운 데이터베이스 버전을 실행 중인 새로운 배포 환경에 데이터 백업을 복원하여 데이터베이스 버전을 업그레이드할 수 있습니다.

UI에서 업그레이드

배포 대시보드의 ‘백업’ 메뉴에서 백업을 복원할 때 새 버전으로 업그레이드하십시오. 백업의 [ 복원 ]을 클릭하면 새 탭에서 프로비저닝 페이지로 이동하며, 이곳에서 새 배포에 대한 일부 옵션을 변경할 수 있습니다. 옵션 중 하나는 데이터베이스 버전으로, 사용자가 업그레이드할 수 있는 버전이 자동으로 표시됩니다. 버전을 선택한 후 ‘생성’을 클릭하여 프로비저닝 및 복원 프로세스를 시작하세요.

CLI를 통한 업그레이드

IBM Cloud CLI를 통해 백업에서 업그레이드 및 복원하려면 리소스 컨트롤러에서 프로비저닝 명령을 사용하십시오.

ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>

매개변수 service-name, service-id, service-plan-idregion이 모두 필요합니다. 또한 JSON 오브젝트에 버전 및 백업 ID 매개변수와 함께 -p를 제공합니다. 새 배치는 백업 시 소스 배치와 동일한 디스크 및 메모리로 자동으로 크기가 조정됩니다.

이 명령은 다음과 같습니다.

ibmcloud resource service-instance-create example-upgrade databases-for-postgresql standard us-south \
-p \ '{
  "backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
  "version":14
}'

API를 통한 업그레이드

백업 파일을 사용하여 업그레이드하기 전에 리소스 컨트롤러 API를 사용하기 위해 필요한 단계를 모두 완료하십시오. 그런 다음 API에 POST 요청을 전송합니다. name, target, resource_groupresource_plan_id 매개변수는 모두 필수입니다. 또한 버전 및 백업 ID를 제공합니다. 새 배치는 백업 시 소스 배치와 동일한 메모리 및 디스크 할당을 가집니다.

이 명령은 다음과 같습니다.

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "my-instance",
    "target": "bluemix-us-south",
    "resource_group": "5g9f447903254bb58972a2f3f5a4c711",
    "resource_plan_id": "databases-for-postgresql-standard",
    "backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
    "version":14
  }'

강제 업그레이드

지원 종료일 이후에는, 더 이상 사용되지 않는 버전을 실행 중인 모든 활성 Databases for PostgreSQL 배포 환경이 자동으로 다음 지원 버전으로 업그레이드됩니다. 예를 들어, PostgreSQL 13(사용 중단 예정)이 버전 14로 업그레이드됩니다.

다음과 같은 위험을 방지하려면 지원 종료일 전에 업그레이드하십시오:

  • 이러한 유형의 강제 업그레이드에는 SLA가 제공되지 않습니다.
  • 일부 데이터가 손실될 수 있습니다.
  • 사용 중인 애플리케이션에서 장시간의 서비스 중단이 발생할 수 있습니다.
  • 응용 프로그램이 새 버전과 호환되지 않을 경우 작동이 중단될 수 있습니다.
  • 사용자의 배포 환경에서 이 업그레이드가 언제 이루어질지는 제어할 수 없습니다.
  • 이 강제 업그레이드에 대해서는 롤백 절차가 없습니다.

지원 종료 일정에 대해서는 버전 정책 페이지를 참조하십시오.

버전 업그레이드 시 발생하는 역할 권한 문제

PostgreSQL 16부터 역할 기반 권한 적용이 더욱 엄격해졌습니다. 이는 PostgreSQL 의 상위 아키텍처 변경 사항이며, IBM® 에 특화된 동작 변경 사항은 아닙니다. 이전 버전에서는 ‘ CREATEROLE ’ 속성이 지정된 역할이 다른 역할을 더 광범위하게 관리할 수 있었습니다. PostgreSQL 16 및 이후 버전에서는, 한 역할이 다른 역할에 대한 권한( ADMIN OPTION )을 가지고 있어야만 해당 역할을 부여하거나 취소할 수 있습니다. 자세한 내용은 ‘ PostgreSQL 16’ 릴리스 노트, 역할 속성역할에 관한 ‘ GRANT 문서를 참조하십시오.

PostgreSQL 15 또는 그 이전 버전에서 PostgreSQL 16 또는 그 이후 버전으로 업그레이드하는 경우, 현장 업그레이드(IPU)를 시작하기 전에 역할 할당 사항을 검토하십시오. 업그레이드 후에도 역할 관리가 계속되어야 하는 경우, 업그레이드를 시작하기 전에 필요한 역할에 WITH ADMIN OPTION이 부여되어 있는지 확인하십시오.

업그레이드 후 권한 관련 오류가 발생하는 경우, 예를 들어:

ERROR: only roles with the ADMIN OPTION on role "some_role" may grant this role
DETAIL: role "admin" is not permitted to grant role "some_role"

내장 헬퍼 함수 grant_admin_option_to_roles 을 사용하여 특정 역할에 대해 ADMIN OPTION 을 복원하려면:

  • PostgreSQL v15 및 그 이전 버전에서 PostgreSQL 16 이상으로 업그레이드한 데이터베이스에만 적용됩니다(위에서 설명한 오류가 발생하는 경우).
  • 수정 사항을 적용할 임의의 역할 목록을 받아들입니다.
  • admin user 에 의해서만 실행될 수 있습니다.
  • 여러 번 실행해도 안전합니다(이뎀포텐트).

샘플 사용법:

SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');

이 함수는 ADMIN OPTION 을 가진 admin 사용자에게 지정된 역할(role1, role2, role3)을 부여하여, admin 사용자가 업그레이드된 인스턴스에서 해당 역할을 관리(부여, 취소, 변경 또는 삭제)할 수 있도록 합니다.

주 PostgreSQL 버전에 대한 변경 로그

이전 버전의 ‘ PostgreSQL ’(14~17)에 대한 정보는 ‘ Gen1 ’ 변경 내역을 참조하십시오.