37. ソフトウェアアップグレード

PostGIS は PostgreSQL 内に存在するため、すべての PostGIS は実際には PostgreSQL バージョンと PostGIS バージョンの二つのバージョンのソフトウェアで構成されています。 一般的な原則として、個々のバージョンの PostGIS は、理論的には PostgreSQL の複数のバージョン内で実行でき、その逆も可能です。

実際には、お手持ちの PostgreSQL ディストリビューションをビルドしたパッケージャさんによって二つの正確なバージョンが決定されます。ほとんどの Linux パッケージには、それぞれの PostgreSQL バージョンリリースと PostGIS のバージョンとが含まれていて、一部を個別または同時にアップグレードできます。個別か同時かは設定で決まります。

アップグレードは、個々の要素のアップグレードの観点から考えることができます。

37.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 です。メジャーアップグレードでは、新機能追加や振る舞い変更が行われます。

37.1.1. マイナー PostgreSQL アップグレード

「マイナーアップグレード」では、特別な処理は不要です。単に新しいソフトウェアをインストールし、サーバを再起動するだけです。

37.1.2. PostgreSQL のメジャーアップグレード

「メジャーアップグレード」では、アップグレードを行うには二つの方法があります。

37.1.2.1. ダンプ/レストア

全てのデータをプラットフォーム中立のフォーマット (文字列表現)に変換したダンプと、ネイティブ表現に戻したレストアとを行います。時間とCPU資源を大量に消費する可能性があります。しかしながら、新しいアーキテクチャや新しいオペレーティングシステムに移行する場合では、この処理が求められます。このアップグレード方法は、実績もあり、よく理解されているので、データベースがそう大きくない場合には、この方法に固執しない理由はありません。

  • 古いデータベースからデータを pg_dumpall でダンプします。

  • 新バージョンの PostgreSQL と、古いデータベースと同じバージョンの PostGIS をインストールします。PostGIS のバージョンを合致させるのは、ダンプファイルの関数定義が PostGIS ライブラリの予期されるバージョンを参照しなければならないためです。

  • 新しいソフトウェアの initdb プログラムをを使って新しいデータ領域初期化します。

  • 新しいデータ領域上にある新しいサーバを起動します。

  • pg_restore を使ってダンプファイルをリストアします。

37.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" が生成された場合には、それらを実行します。

  • 新しいサーバを起動します。

37.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';