RDS for PostgreSQL 인스턴스를 업그레이드할 때 PostGIS 확장과 관련된 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

PostGIS 확장 관련 문제로 인해 PostgreSQL 인스턴스용 Amazon Relational Database Service(Amazon RDS)의 메이저 버전 업그레이드가 실패했습니다.

간략한 설명

Amazon RDS for PostgreSQL 인스턴스의 메이저 버전 업그레이드는 여러 이유로 실패할 수 있습니다. 가장 일반적인 이유는 메이저 버전 업그레이드를 수행하기 전에 address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology 또는 postgis_raster와 같은 PostGIS 확장 또는 종속 확장을 현재 지원되는 버전으로 업데이트하지 않았기 때문입니다.

PostGIS 또는 종속 확장으로 인해 RDS PostgreSQL 인스턴스 메이저 버전 업그레이드가 실패했는지 확인하려면 다음을 수행합니다.

1.    인스턴스의 이벤트를 확인합니다. 다음과 유사한 이벤트가 표시될 수 있습니다.

Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because one or more databases have settings or usages that are not compatible with the target engine version. Please check the precheck log file for more details

2.    업그레이드 프로세스 중에 생성된 데이터베이스 인스턴스에 대한 사전 확인 로그 파일을 확인합니다. 메이저 버전 업그레이드 중에 RDS for PostgreSQL는 인스턴스에 대해 특정 사전 확인 절차를 수행하여 업그레이드 프로세스 실패의 원인이 될 수 있는 문제를 식별합니다. 사전 검사 중에 발생한 문제에 대한 정보는 pg_upgrade_precheck.log 파일에서 확인할 수 있습니다. Amazon RDS는 파일 이름에 타임스탬프를 추가합니다.

사전 확인 로그 파일에 다음과 유사한 메시지가 포함되었다면 PostGIS 또는 종속 확장으로 인해 업그레이드 프로세스가 실패했음을 의미합니다.

------------------------------------------------------------------
Upgrade could not be run on Sun May 22 14:20:45 2022
------------------------------------------------------------------
The instance could not be upgraded from 9.6.22.R1 to 12.7.R1 because of following reasons.
Please take appropriate action on databases that have usages incompatible with requested major engine version upgrade and try again.
- Following usages in database 'test_db' need to be corrected before upgrade:
-- The instance could not be upgraded because the PostGIS extension and its dependent extensions (address_standardizer,
address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster) installation in one or more databases is
not compatible with your desired upgrade path. Please upgrade postgis and its dependent extensions to version supported in requested version.
----------------------- END OF LOG  ----------------------

설치된 PostGIS 버전과 종속 확장을 확인하려면 다음 명령을 실행합니다.

postgres=> select * FROM pg_available_extensions where name like '%postgis%';
postgres=> select * FROM pg_available_extensions where name like '%address_standardizer%';
postgres=> select probin from pg_proc where proname = 'postgis_raster_lib_version';

installed_version 열의 값에는 현재 설치된 확장 버전이 표시됩니다. 이 열에 값이 없으면 확장이 설치되지 않았음을 의미합니다.

해결 방법

RDS for PostgreSQL 인스턴스의 업그레이드 실패 문제를 해결하려면 사용자의 상황에 따라 다음 방법 중 하나를 사용합니다.

PostGIS 확장 제거

다음 조건에서 확장을 삭제하고 업그레이드를 완료한 후 다시 생성하세요.

  • 인스턴스에는 PostGIS 또는 종속 확장이 필요하지 않습니다.
  • 확장의 업데이트 경로가 존재하지 않습니다.

참고: 확장을 삭제하면 종속 열도 제거됩니다.

1.    확장을 삭제하려면 다음 명령을 실행합니다.

postgres=> DROP EXTENSION example_extension CASCADE;

2.    확장이 설치된 모든 데이터베이스에서 확장을 삭제한 후 RDS for PostgreSQL 인스턴스를 업그레이드합니다.

3.    인스턴스를 업그레이드한 후 필요한 경우 다음 명령을 실행하여 확장을 만듭니다.

postgres=> CREATE EXTENSION extension_name;

PostGIS 확장 업데이트

다음을 수행합니다.

  • 업그레이드를 여러 단계로 수행합니다.
  • RDS for PostgreSQL 인스턴스를 업그레이드하기 전에 각 단계에서 확장 버전을 업데이트합니다.

RDS for PostgreSQL 인스턴스에 설치된 확장에 대해 지원되는 다음 최신 업데이트 경로를 확인합니다. 다음 명령을 실행합니다.

postgres=> SELECT * FROM pg_extension_update_paths('extension_name') WHERE source='current_version' AND target NOT LIKE '%next%' AND source<target AND path LIKE '%--%';

다음 항목을 교체해야 합니다.

  • 설치된 확장 이름을 포함한 extension_name
  • 현재 설치된 확장이 포함된 current_version

명령이 업데이트 경로를 반환하지 않지만 확장의 installed_versiondefault_version 값이 같으면 확장이 이미 업데이트되었음을 의미합니다. 이 경우 엔진 버전 업그레이드를 수행할 수 있습니다.

예를 들면 다음과 같습니다.

postgres=> SELECT * FROM pg_extension_update_paths('postgis') WHERE source='2.3.7' AND target NOT LIKE '%next%' AND source<target AND path LIKE '%--%';

출력 예시:

source | target |     path
------+--------+--------------
2.3.7  | 2.5.2  | 2.3.7--2.5.2 (1 row)

installed_versiondefault_version의 값이 다른 경우 설치된 PostGIS 및 종속 확장을 지원되는 가장 최신 대상 버전으로 업그레이드합니다.

확장을 업그레이드하려면 다음 명령을 실행합니다.

postgres=> ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

참고: 인스턴스의 종속 확장과 함께 PostGIS 확장을 업데이트해야 합니다. 이러한 확장은 데이터베이스 수준에서 설치됩니다. 따라서 확장이 설치된 모든 데이터베이스에서 확장을 업데이트해야 합니다.

PostGIS 버전 2.5.0 이상을 사용하는 경우 PostGIS 및 postgis_raster 확장을 업데이트하려면 다음 명령어를 실행합니다.

postgres=> SELECT postgis_extensions_upgrade();

PostGIS 버전 3.0 이상에서는 래스터 기능이 별도의 확장으로 분리되었습니다. 래스터를 사용하지 않는 경우 확장을 업데이트한 후 다음 명령어를 실행합니다.

postgres=> DROP EXTENSION postgis_raster;

확장을 업데이트한 후 RDS for PostgreSQL 인스턴스를 이러한 확장 버전이 지원되는 엔진 버전으로 업그레이드할 수 있습니다.

인스턴스를 업그레이드한 후 대상 엔진 버전을 설치할 때까지 확장 버전을 업데이트한 다음 RDS 인스턴스 엔진 버전을 업그레이드하는 단계를 반복할 수 있습니다.


관련 정보

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

Amazon RDS for PostgreSQL로 PostgreSQL 확장 사용