RDS for PostgreSQL를 업그레이드할 때 PostGIS 확장과 관련된 문제를 해결하려면 어떻게 해야 하나요?

5분 분량
0

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

간략한 설명

RDS for PostgreSQL 인스턴스의 주요 버전 업그레이드가 여러 가지 이유로 실패할 수 있습니다. 가장 일반적인 이유는 오래된 PostGIS 확장 또는 종속 확장입니다. 메이저 버전 업그레이드를 수행하기 전에 PostGis 및 종속 확장을 업데이트해야 합니다. 종속 확장에는 address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology 또는 postgis_raster가 있습니다.

먼저 RDS for PostgreSQL 인스턴스 메이저 버전 업그레이드가 확장 때문에 실패했는지 확인합니다. 확장 프로그램에 문제가 있는 경우 PostGIS 및 종속 확장 프로그램을 업그레이드하세요.

해결 방법

인스턴스에 확장 업그레이드가 필요한지 확인

확장으로 인해 RDS for PostgreSQL 인스턴스 메이저 버전 업그레이드가 실패했는지 확인하려면 다음 작업을 완료하세요.

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

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

인스턴스의 사전 점검 로그 파일을 확인합니다. 메이저 버전 업그레이드에서는 RDS for PostgreSQL가 인스턴스에서 사전 검사 절차를 수행합니다. 사전 점검 중에 발생하는 문제는 pg_upgrade_precheck.log 파일에서 확인할 수 있습니다.

사전 점검 로그 파일에 다음 예와 유사한 메시지가 포함된 경우 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 열의 값은 현재 설치된 확장의 버전을 표시합니다. 이 열에 값이 없으면 확장이 설치되지 않은 것입니다.

PostGIS 확장 업그레이드 준비

RDS for PostgreSQL 인스턴스를 업그레이드할 경우 다음 작업을 수행하세요.

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

SELECT postgis_full_version() 명령을 실행합니다. 출력에서 업그레이드 보류 중인 확장이 있는지 확인합니다.

업그레이드해야 하는 확장이 포함된 예제 출력:

postgres=>  SELECT postgis_full_version();
                                                                                                                        postgis_full_version                                                                                                                          
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.2.5 r15298" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" (core procs from "2.2.2 r14797" need upgrade) RASTER (raster procs from "2.2.2 r14797" need upgrade)

업그레이드가 필요한 확장이 없는 예제 출력:

postgres=> SELECT postgis_full_version();
                                                                                postgis_full_version                                                                                 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.3.7 r16523" PGSQL="96" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" RASTER
(1 row)

업그레이드에 사용할 수 있는 버전 선택

pg_extension 카탈로그 테이블의 출력에 있는 PostGIS 설치 및 버전 정보가 SELECT postgis_full_version() 명령과 일치하는지 확인합니다.

다음 명령을 실행하여 RDS for PostgreSQL 인스턴스에 설치된 확장 프로그램의 지원되는 다음 버전을 확인합니다.

postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'postgis%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1;
postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'address%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1;

업그레이드에 사용할 수 있는 지원되는 버전 중 가장 높은 버전을 선택합니다.

참고: PostgreSQL 엔진을 업그레이드하기 전에 pg_extension 테이블을 확인하여 "next", "dev" 또는 "unpackaged" 확장 버전이 없는지 확인합니다. 이러한 버전 중 하나를 사용하는 경우 먼저 표준 확장 버전으로 이동하는 것이 좋습니다.

확장 프로그램 업그레이드

확장 프로그램을 업그레이드하려면 다음 명령 중 하나를 실행합니다.

설치된 PostGIS 버전이 2.5 이상인 경우 다음 명령을 실행합니다.

SELECT postgis_extensions_upgrade();


PostGIS를 버전 2.5.x에서 3.x로 업그레이드하려면 다음 명령을 두 번 실행합니다.

SELECT postgis_extensions_upgrade();

설치된 PostGIS 버전이 2.4 또는 이전 버전인 경우 ALTER EXTENSION 명령을 실행합니다.

ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

postgis_topology와 같은 여러 개의 PostGIS 모듈을 설치한 경우 각 모듈을 개별적으로 업데이트합니다. 다음 예제는 ALTER EXTENSION 명령을 사용하여 여러 모듈을 업데이트하는 모범 사례를 보여줍니다.

ALTER EXTENSION postgis UPDATE TO 'new-version';

ALTER EXTENSION postgis_topology UPDATE TO 'new-version';

ALTER EXTENSION postgis_tiger_geocoder UPDATE TO 'new-version';


참고: 확장은 데이터베이스 수준에서 설치됩니다. 확장 프로그램이 설치된 모든 데이터베이스에서 확장 프로그램을 업데이트해야 합니다.

현재 설치된 PostGIS 버전이 3.0 이상이면 래스터 함수를 별도로 업데이트해야 합니다. 래스터 함수를 사용하지 않는 경우 확장 프로그램을 업데이트한 후 다음 명령어를 실행하세요.

postgres=> DROP EXTENSION postgis_raster;

확장 프로그램을 업데이트한 후 지원되는 확장 프로그램 기능 버전에 대해 RDS for PostgreSQL 엔진 버전을 업그레이드합니다.

인스턴스를 업그레이드한 후 단계를 반복하여 설치된 PostGIS 버전과 종속 확장을 확인합니다.

참고: 현재 사용 중인 RDS for PostgreSQL 버전에서 PostGIS 및 해당 종속 확장을 최신 지원 버전으로 업그레이드하는 것이 가장 좋습니다.