Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
RDS for PostgreSQL インスタンスをアップグレードする際に、PostGIS 拡張機能に関連する問題をトラブルシューティングする方法を教えてください。
PostgreSQL インスタンスの Amazon Relational Database Service (Amazon RDS) のメジャーバージョンアップグレードが、PostGIS 拡張機能の問題が原因で失敗しました。
簡単な説明
Amazon RDS for PostgreSQL インスタンスのメジャーバージョンアップグレードは、複数の理由で失敗する可能性がありますが、最も一般的な理由は古い PostGIS 拡張機能またはそれに依存する拡張機能です。そのため、メジャーバージョンアップグレードを実行する前に、これらの拡張機能を更新する必要があります。依存拡張機能には、address_standardizer、address_standardizer_data_us、postgis_tiger_geocoder、postgis_topology、postgis_raster などがあります。
まず、拡張機能が原因でアップグレードが失敗したかどうかを確認します。問題が拡張機能にある場合は、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 にアップグレードするには、次のコマンドを 2 回実行します。
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 のバージョンとそれに依存する拡張機能を確認します。
**注:**PostGIS とそれに依存する拡張機能を、現在の RDS for PostgreSQL バージョンでサポートされている最新バージョンにアップグレードするのがベストプラクティスです。

関連するコンテンツ
- 質問済み 7ヶ月前lg...