39. ソフトウェアアップグレード¶
PostGIS は PostgreSQL 内に存在するため、すべての PostGIS は実際には PostgreSQL バージョンと PostGIS バージョンの二つのバージョンのソフトウェアで構成されています。 一般的な原則として、個々のバージョンの PostGIS は、理論的には PostgreSQL の複数のバージョン内で実行でき、その逆も可能です。
実際には、お手持ちの PostgreSQL ディストリビューションをビルドしたパッケージャさんによって二つの正確なバージョンが決定されます。ほとんどの Linux パッケージには、それぞれの PostgreSQL バージョンリリースと PostGIS のバージョンとが含まれていて、一部を個別または同時にアップグレードできます。個別か同時かは設定で決まります。
アップグレードは、個々の要素のアップグレードの観点から考えることができます。
39.1. PostgreSQL のアップグレード¶
二種類の PostgreSQL アップグレードシナリオがあります:
「マイナーアップグレード」は、ソフトウェアバージョンが「パッチ」レベルの増加の時です。たとえば、8.4.3 から 8.4.4 の時や、9.0.1 から 9.0.3 の時です。1を超えるパッチバージョンの増加は問題ありません。マイナーアップグレードは、バグフィックスのためで、新機能追加や振る舞いの変更は行われません。
「メジャー」「マイナー」バージョンのどちらかが増加する時は「メジャーアップグレード」になります。たとえば、8.4.5 から 9.0.0 や、9.0.5 から 9.1.1 です。メジャーアップグレードでは、新機能追加や振る舞い変更が行われます。
39.1.1. マイナー PostgreSQL アップグレード¶
「マイナーアップグレード」では、特別な処理は不要です。単に新しいソフトウェアをインストールし、サーバを再起動するだけです。
39.1.2. PostgreSQL のメジャーアップグレード¶
「メジャーアップグレード」では、アップグレードを行うには二つの方法があります。
39.1.2.1. ダンプ/レストア¶
全てのデータをプラットフォーム中立のフォーマット (文字列表現)に変換したダンプと、ネイティブ表現に戻したレストアとを行います。時間とCPU資源を大量に消費する可能性があります。しかしながら、新しいアーキテクチャや新しいオペレーティングシステムに移行する場合では、この処理が求められます。このアップグレード方法は、実績もあり、よく理解されているので、データベースがそう大きくない場合には、この方法に固執しない理由はありません。
古いデータベースからデータを
pg_dumpall
でダンプします。新バージョンの PostgreSQL と、古いデータベースと同じバージョンの PostGIS をインストールします。PostGIS のバージョンを合致させるのは、ダンプファイルの関数定義が PostGIS ライブラリの予期されるバージョンを参照しなければならないためです。
新しいソフトウェアの
initdb
プログラムをを使って新しいデータ領域初期化します。新しいデータ領域上にある新しいサーバを起動します。
pg_restore
を使ってダンプファイルをリストアします。
39.1.2.2. pg_upgrade¶
pg_upgrade ユーティリティで PostgreSQL データディレクトリが、ダンプ/リストアの手順を踏まずにアップグレードが可能になります。ユーティリティはデータファイル自体の変更処理はできませんが、PostgreSQL のメジャーアップグレードで、より一般的で頻繁に変更されるシステムテーブルについて変更処理を行います。
注釈
アップグレード処理実行の完全な手順は、PostgreSQL サイトの pg_upgrade ウェブページにあります。
pg_upgrade プログラムは、動作している古いバージョンと新しいバージョンの両方のバージョンの PostgreSQL にアクセスすることを期待しているため、両方ともインストールする必要があります。
新に使用する新しいバージョンの PostgreSQL をインストールします。
新しい PostgreSQL に対して、古い PostgreSQL に入っているのと同じバージョンの PostGIS をインストールします。
initdb
の新しい複製で新しい PostgreSQL データ領域を初期化します。新旧両方の PostgreSQL サーバがオフになっていることを確認します。
pg_upgrade を実行して、新しいソフトウェアのインストールのバイナリを使用していることを確認します。
pg_upgrade --old-datadir "/var/lib/postgres/12/data" --new-datadir "/var/lib/postgres/13/data" --old-bindir "/usr/pgsql/12/bin" --new-bindir "/usr/pgsql/13/bin"
pg_upgrade で ".sql" が生成された場合には、それらを実行します。
新しいサーバを起動します。
39.2. PostGIS のアップグレード¶
PostGIS は「エクステンション」機構を通じてアップグレードを扱います。"CREATE EXTENSION postgis" を使って空間データベースを構築した場合には、同じ機能でデータベースのアップデートができます。
まず、新しいソフトウェアをインストールして、データベースに使えるようにします。
その後、PostGIS エクステンションのアップグレードのための SQL を実行します。
-- If you are upgrading from PostGIS 2.5 or later
-- and want the latest installed version
SELECT postgis_extensions_upgrade();
-- If you are upgrading from an earlier version
-- you have to specifically turn on the version you want
ALTER EXTENSION postgis UPDATE TO '2.5.5';