PostGIS

PostGIS は、 PostgreSQLの非常に人気のオープンソース拡張機能であり、 GIS地理情報システムオブジェクトをデータベースに保存し、 SQLを介して照会するためのサポートを導入します。

サポートされているインストール方法

環境PostgreSQLバージョン、Kubernetesバージョン、およびCloudNativePGバージョンによっては、PostGISをプロビジョニングする2つの主な方法があります。

  1. **Image Volume Extensions** 拡張バイナリを読み取り専用ボリュームとしてOCIイメージから直接マウントしますPG 18+およびKubernetes 1.35+で推奨。

  2. **PostGIS Operand Images** すでにPostGISライブラリを含む事前構築されたPostgreSQLイメージを使用します。

以下のいずれかの方法を使用してPostGISがシステムにプロビジョニングされた後、データベース内で有効にして管理する必要があります以下の 拡張機能の有効化 セクションを参照してください。

方法1イメージボリューム拡張

PostgreSQL 18 および Kubernetes 1.35 ImageVolume 機能ゲートが有効になっている1.33および1.34以降、 イメージボリューム拡張を使用したイメージカタログ を活用できます。

これは、拡張機能のOCIイメージのコンテンツを読み取り専用ボリュームとしてPostgresコンテナに直接マウントすることにより、公式の最小限のPostgreSQLイメージを使用し、実行時にPostGISを「プラグイン」できるため、拡張機能を管理する最新の方法です。これにより、拡張機能のライフサイクルがベースのPostgreSQLイメージから分離され、オペランドイメージをスリムで安全な状態に保ちます。

CloudNativePGコミュニティは、

postgres-extensions-containers を介してPostGISのスタンドアロン拡張コンテナイメージを配布します

リポジトリ。

イメージカタログを介してCloudNativePG 1.29+の場合

CloudNativePG 1.29から、 image catalogs with image volume extensions を利用できます

これらのバージョンの管理を自動化します。

image volume extensions page を参照してください

postgis キーを使用して、PostgreSQLクラスターに拡張機能を追加する方法については、

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-postgis
spec:
  # ... <snip>
  imageCatalogRef:
    apiGroup: postgresql.cnpg.io
    kind: ClusterImageCatalog
    name: postgresql-minimal-trixie
    major: 18

  postgresql:
    extensions:
      # ... <snip>
      - name: postgis
      # ... <snip>

Cluster リソースに直接

次の例は、 Cluster リソースに拡張機能を直接ロードすることにより、 PostGIS 3.6.2をPostgreSQL 18クラスターに追加する方法を示しています。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-postgis
spec:
  imageName: ghcr.io/cloudnative-pg/postgresql:18.3-minimal-trixie
  instances: 1

  storage:
    size: 1Gi

  postgresql:
    extensions:
    - name: postgis
      image:
        reference: ghcr.io/cloudnative-pg/postgis-extension:3.6.2-18-trixie
      ld_library_path:
      - system

postgres-extensions-containers を参照してください。

この拡張機能の最新バージョンと手順のプロジェクト。

方法2 PostGISオペランド画像

専用のpostgis-containers レジストリを使用し続けたいユーザー、またはイメージボリューム拡張をサポートしていないPostgreSQLまたはKubernetesの古いバージョンを使用しているユーザーの場合、コミュニティはプリインストールされたPostGIS PostgreSQL Container images の上にビルドされてイメージの維持を続けています。

詳細については、次をご覧ください。

postgis-containers

postgis-containers

この方法を使用するには、 .spec.imageName で目的のPostGIS対応画像をポイントします。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-postgis
spec:
  instances: 1
  imageName: ghcr.io/cloudnative-pg/postgis:18.3-3.6.2-system-trixie
  storage:
    size: 1Gi

拡張機能の有効化

バイナリが上記のいずれかの方法でプロビジョニングされたら、データベースで拡張機能を有効にする必要があります。

Database リソースを使用すると、バージョンのアップグレードを含む拡張機能のライフサイクルの宣言的管理が可能になります。

注釈

詳細については、 データベース内の拡張機能の管理 を参照してください。

apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
  name: cluster-postgis-app
spec:
  name: app
  owner: app
  cluster:
    name: cluster-postgis
  extensions:
  - name: postgis
    version: 3.6.2
  - name: postgis_raster
  - name: postgis_sfcgal
  - name: fuzzystrmatch
  - name: address_standardizer
  - name: address_standardizer_data_us
  - name: postgis_tiger_geocoder
  - name: postgis_topology

Tip

extensions スタンザで`version` を指定することを強くお勧めします。 CloudNativePGは、このバージョンをデータベースに現在インストールされているバージョンと比較します。それらが異なる場合、必要な`ALTER EXTENSION ... UPDATE TO ...` コマンドが自動的に実行されます。

検証

app データベースに接続し、PostgreSQLカタログを照会することにより、コンテナ内にあるPostGISの利用可能なバージョンを簡単に確認できます。例

kubectl cnpg psql cluster-postgis -- app -c \
  "SELECT * FROM pg_available_extensions WHERE name ~ ^postgis ORDER BY 1"

これに似たものを返しますこのドキュメントのものとは異なる値を取得する場合があります。

           name           | default_version | installed_version |                          comment
- -------------------------+-----------------+-------------------+------------------------------------------------------------
 postgis                  | 3.6.2           | 3.6.2             | PostGIS geometry and geography spatial types and functions
 postgis-3                | 3.6.2           |                   | PostGIS geometry and geography spatial types and functions
 postgis_raster           | 3.6.2           | 3.6.2             | PostGIS raster types and functions
 postgis_raster-3         | 3.6.2           |                   | PostGIS raster types and functions
 postgis_sfcgal           | 3.6.2           | 3.6.2             | PostGIS SFCGAL functions
 postgis_sfcgal-3         | 3.6.2           |                   | PostGIS SFCGAL functions
 postgis_tiger_geocoder   | 3.6.2           | 3.6.2             | PostGIS tiger geocoder and reverse geocoder
 postgis_tiger_geocoder-3 | 3.6.2           |                   | PostGIS tiger geocoder and reverse geocoder
 postgis_topology         | 3.6.2           | 3.6.2             | PostGIS topology spatial types and functions
 postgis_topology-3       | 3.6.2           |                   | PostGIS topology spatial types and functions
(10 rows)

次のステップは、 Database リソースにリストされている拡張機能がapp データベースに正しくインストールされていることを確認します。

kubectl cnpg psql cluster-postgis -- app -c \dx

コマンドは次のようなものを返します。

                                        List of installed extensions
             Name             | Version | Default version |   Schema   |                  Description
- -----------------------------+---------+-----------------+------------+------------------------------------------------
 address_standardizer         | 3.6.2   | 3.6.2           | public     | Used to parse an address into constituent ...
 address_standardizer_data_us | 3.6.2   | 3.6.2           | public     | Address Standardizer US dataset example
 fuzzystrmatch                | 1.2     | 1.2             | public     | determine similarities and distance between...
 plpgsql                      | 1.0     | 1.0             | pg_catalog | PL/pgSQL procedural language
 postgis                      | 3.6.2   | 3.6.2           | public     | PostGIS geometry and geography spatial type...
 postgis_raster               | 3.6.2   | 3.6.2           | public     | PostGIS raster types and functions
 postgis_sfcgal               | 3.6.2   | 3.6.2           | public     | PostGIS SFCGAL functions
 postgis_tiger_geocoder       | 3.6.2   | 3.6.2           | tiger      | PostGIS tiger geocoder and reverse geocoder
 postgis_topology             | 3.6.2   | 3.6.2           | topology   | PostGIS topology spatial types and functions
(9 rows)

最後に

kubectl cnpg psql cluster-postgis -- app -c SELECT postgis_full_version()

戻る

                                                    postgis_full_version
- -----------------------------------------------------------------------------------------------------------------------
 POSTGIS="3.6.2 08d9b9f" [EXTENSION] PGSQL="180" GEOS="3.13.1-CAPI-1.19.2"
 SFCGAL="SFCGAL 2.0.0, CGAL 6.0, BOOST 1.83.0"
 PROJ="9.6.0 NETWORK_ENABLED=OFF URL_ENDPOINT= USER_WRITABLE_DIRECTORY=/tmp/proj"
 (compiled against PROJ 9.6.0)
 GDAL="GDAL 3.10.3, released 2025/04/01 GDAL_DATA not found"
 LIBXML="2.9.14" LIBJSON="0.18" LIBPROTOBUF="1.5.1" WAGYU="0.5.0 (Internal)"
 TOPOLOGY RASTER
(1 row)