Upgrading PostGIS

このセクションでは、RHEL/CentOS 7プラットフォームの次のアップグレード例について説明します。

例1:PostGISバージョン3.1から3.2へのアップグレード

次の例では、 EDB Postgres Advanced Server 14のPostGISバージョン3.1からバージョン3.2へのアップグレードについて説明します。

偶発的なアップグレードを避けるために、PostGISバージョン3.1と3.2では異なるパッケージ名を使用しています。したがって、バージョン3.2にアップグレードするには、最初にバージョン3.1をアンインストールする必要があります。バージョン3.2をインストールしたら、PostGIS拡張機能をアップグレードできます。

  1. PostGISバージョン3.1でPostGIS拡張機能をまだ作成していない場合は作成します。手順については、

    Creating extensions を参照してください。

  2. PostGISバージョン3.1をアンインストールします。 EPASバージョン14の場合:

yum -y erase edb-as14-postgis3

EDB Postgres Advanced Serverの古いバージョンの場合:

edb_notranlate_1 <xx> はEDB Postgres Advanced Serverのバージョンです。

詳細については、 Uninstalling PostGIS を参照してください。

  1. PostGISバージョン3.2をインストールします。手順については、

    Installing PostGIS on RHEL 7/OL 7 x86 を参照してください。

1.次のコマンドを使用してPostGIS拡張機能をアップグレードします。

注釈

PostGISバージョン2.5より前のバージョンからPostGISバージョン3.1に最初にアップグレードした場合、コマンドを実行する前に`postgis_raster extension` を DROP する必要があります。 !!!

SELECT postgis_extensions_upgrade();
__OUTPUT__
NOTICE:  Updating extension postgis from 3.1.4 to 3.2.1
NOTICE:  Updating extension postgis_sfcgal from 3.1.4 to 3.2.1
NOTICE:  Updating extension postgis_raster from 3.1.4 to 3.2.1
NOTICE:  Updating extension postgis_topology from 3.1.4 to 3.2.1
NOTICE:  Updating extension postgis_tiger_geocoder from 3.1.4 to 3.2.1
                    postgis_extensions_upgrade
-------------------------------------------------------------------
 Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)

例2:同じEDB Postgres Advanced ServerバージョンでPostGISバージョン2.5以降から3.1.4にアップグレードする

次の例では、 EDB Postgres Advanced Serverバージョン12をPostGISバージョン2.5.5からPostGISバージョン3.1.4にアップグレードするプロセスを説明します。

注釈

Creating extensions の説明に従ってPostGISバージョン2.5.5の拡張機能を既に作成しており、EDB Advanced Server 12サービスが実行されていることを前提としています。

  1. EDB Postgres Advanced Server 12のPostGISバージョン2.5.5をPostGISバージョン3.1.4にアップグレードするには、スーパーユーザー権限を引き受けて次のコマンドを呼び出します。

yum upgrade edb-as12-postgis-3.1.4 -y

2.拡張機能を更新するには、 enterprisedb ユーザーに切り替え、 psqlクライアントアプリケーションでデータベース(既に拡張機能を作成した場所)に接続し、次のコマンドを実行します。

edb=# alter extension postgis update to 3.1.4;
WARNING: unpackaging raster
WARNING: PostGIS Raster functionality has been unpackaged
HINT: type `SELECT postgis_extensions_upgrade();` to finish the upgrade. After upgrading, if you want to drop raster, run: DROP EXTENSION postgis_raster;
ALTER EXTENSION
edb=# alter extension address_standardizer update to 3.1.4;
ALTER EXTENSION
edb=# SELECT postgis_extensions_upgrade();
NOTICE: Updating extension postgis_sfcgal from 2.5.5 to 3.1.4
NOTICE: Packaging extension postgis_raster
NOTICE: Updating extension postgis_topology from 2.5.5 to 3.1.4
NOTICE: Updating extension postgis_tiger_geocoder from 2.5.5 to 3.1.4
          postgis_extensions_upgrade
-------------------------------------------------------------------
 Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)

例3:別のEDB Postgres Advanced Serverバージョンで2.5より前のPostGISバージョンから3.1.4にアップグレードする

次の例では、 EDB Postgres Advanced Server EDB Postgres Advanced Serverバージョン14のPostGISバージョン3.1.4にアップグレードするプロセスを説明します。

  • ステップ1 PostGIS 3.1.1にアップグレードします。これは、依存関係の問題を解決するために必要な中間手順です。

  • ステップ2 PostGIS 3.1.4にアップグレードします。

  • ステップ3 EDB Postgres Advanced Serverバージョン10から14にアップグレードします。

PostGISデータがラスター関数に依存する場合、PostGISバージョン3.1.4にアップグレードするには

dumping and reloading the data が必要です。

ステップ1 PostGISバージョン2.4.6を3.1.4にアップグレードするには、最初に3.1.1にアップグレードする必要があります。

  1. EDB Advanced Server 10のbinディレクトリに移動します。

cd /usr/edb/as10/bin/

2.スーパーユーザ権限を想定し、次のコマンドを呼び出してPostGISバージョン3.1.1にアップグレードします。

yum upgrade edb-as10-postgis-3.1.1 -y

注釈

Debianプラットフォームのコマンドについては、 Installing PostGIS on a Debian/Ubuntu Host section を参照してください。

3.拡張機能を更新するには、 enterprisedb ユーザーに切り替え、 psqlクライアントアプリケーションでデータベース(既に拡張機能を作成した場所)に接続し、次のコマンドを実行します。

edb=# alter extension postgis update to 3.1.1;
WARNING: unpackaging raster
WARNING: PostGIS Raster functionality has been unpackaged
HINT: type `SELECT postgis_extensions_upgrade();` to finish the upgrade. After upgrading, if you want to drop raster, run: DROP EXTENSION postgis_raster;
ALTER EXTENSION
edb=# alter extension address_standardizer update to 3.1.1;
ALTER EXTENSION
edb=# SELECT postgis_extensions_upgrade();
__OUTPUT__
NOTICE: Updating extension postgis_sfcgal from 2.4.6 to 3.1.1
NOTICE: Packaging extension postgis_raster
NOTICE: Updating extension postgis_topology from 2.4.6 to 3.1.1
NOTICE: Updating extension postgis_tiger_geocoder from 2.4.6 to 3.1.1
          postgis_extensions_upgrade
-------------------------------------------------------------------
 Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)

ステップ2 PostGISバージョン3.1.4にアップグレードします。

  1. PostGISバージョン3.1.1を3.1.4にアップグレードするには、 EDB Postgres Advanced Server 10で次のコマンドを呼び出します。

yum upgrade edb-as10-postgis-3.1.4 -y

2.拡張機能を更新するには、 enterprisedb ユーザーに切り替えて、次のコマンドを実行します。

edb=# alter extension postgis update to 3.1.4;
WARNING: unpackaging raster
WARNING: PostGIS Raster functionality has been unpackaged
HINT: type `SELECT postgis_extensions_upgrade();` to finish the upgrade. After upgrading, if you want to drop raster, run: DROP EXTENSION postgis_raster;
ALTER EXTENSION

PostGISバージョン3.1.4では、ラスター関数の戻り値のタイプが変更されました。これには、アップグレード プロセスの一部としてラスター エクステンションを削除して作成する必要があります。

edb=# drop extension postgis_raster;
DROP EXTENSION
edb=# SELECT postgis_extensions_upgrade();
NOTICE: Updating extension postgis_sfcgal from 3.1.1 to 3.1.4
NOTICE: Updating extension postgis_topology from 3.1.1 to 3.1.4
NOTICE: Updating extension postgis_tiger_geocoder from 3.1.1 to 3.1.4
          postgis_extensions_upgrade
-------------------------------------------------------------------
 Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)
edb=# alter extension address_standardizer update to 3.1.4;
ALTER EXTENSION

psqlクライアントセッションを終了して、再度開きます。

edb=# \q
./psql -d edb -p 5444
edb=# create extension postgis_raster;
CREATE EXTENSION

ステップ3 EDB Postgres Advanced Serverバージョン10から14にアップグレードします。

1.スーパーユーザー権限でEDB Postgres Advanced Server 10サービスを停止します。

systemctl stop edb-as-10
  1. EDB Postgres Advanced Serverバージョン14をインストールします。

yum install edb-as14-server -y
  1. EDB Advanced Server 14のbinディレクトリに移動し、クラスターを初期化します。

cd /usr/edb/as14/bin/

./edb-as-14-setup initdb
  1. EDB Postgres Advanced Serverバージョン14.0のPostGISバージョン3.1.4をインストールします。

yum install edb-as14-postgis3-3.1.4 -y

5.スーパーユーザー権限でEDB Postgres Advanced Server 14.0サービスを停止します。

systemctl stop edb-as-14
  1. enterprisedb ユーザーに切り替えて、 temp フォルダーを作成します。

su enterprisedb
cd $(mktemp -d)
  1. 次のコマンドを実行して、クラスターの互換性と一貫性を確認し、アップグレードを実行します。

bash-4.2$ /usr/edb/as14/bin/pg_upgrade -d /var/lib/edb/as10/data/ -D /var/lib/edb/as14/data/ -U enterprisedb -b /usr/edb/as10/bin/ -B /usr/edb/as14/bin/ -p 5444 -P 5445 -c

Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Checking for invalid "unknown" user columns ok
Checking for hash indexes ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok

Clusters are compatible
bash-4.2$ /usr/edb/as14/bin/pg_upgrade -d /var/lib/edb/as10/data/ -D /var/lib/edb/as14/data/ -U enterprisedb -b /usr/edb/as10/bin/ -B /usr/edb/as14/bin/ -p 5444 -P 5445 --link

Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Checking for invalid "unknown" user columns ok
Creating dump of global objects ok
Creating dump of database schemas
ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

Performing Upgrade
Analyzing all rows in the new cluster ok
Freezing all rows in the new cluster ok
Deleting files from new pg_xact ok
Copying old pg_clog to new server ok
Setting next transaction ID and epoch for new cluster ok
Deleting files from new pg_multixact/offsets ok
Copying old pg_multixact/offsets to new server ok
Deleting files from new pg_multixact/members ok
Copying old pg_multixact/members to new server ok
Setting next multixact ID and offset for new cluster ok
Resetting WAL archives ok
Setting frozenxid and minmxid counters in new cluster ok
Restoring global objects in the new cluster ok
Restoring database schemas in the new cluster
ok
Adding ".old" suffix to old global/pg_control ok

If you want to start the old cluster, you will need to remove
the ".old" suffix from /var/lib/edb/as9.6/data/global/pg_control.old.
Because "link" mode was used, the old cluster cannot be safely
started once the new cluster has been started.

Linking user relation files
ok
Setting next OID for new cluster ok
Sync data directory to disk ok
Creating script to analyze new cluster ok
Creating script to delete old cluster ok
Checking for hash indexes ok

Upgrade Complete
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh

Running this script will delete the old clusters data files:
./delete_old_cluster.sh

8.スーパーユーザー権限を想定し、 EDB Postgres Advanced Server 14のbin ディレクトリに移動し、サービスを開始します。

cd /usr/edb/as14/bin/

systemctl start edb-as-14

9.拡張機能を更新するには、 enterprisedb ユーザーに切り替え、 psqlクライアントアプリケーションでデータベース(既に拡張機能を作成した場所)に接続し、次のコマンドを実行します。

su enterprisedb
./psql -d edb -p 5444
edb=# SELECT PostGIS_Extensions_Upgrade();
__OUTPUT__
NOTICE: Updating extension postgis 3.1.4
      postgis_extensions_upgrade
-------------------------------------------------------------------
Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)