PostGIS ======= .. raw:: html `PostGIS `_ は、 PostgreSQLの非常に人気のオープンソース拡張機能であり、 GIS地理情報システムオブジェクトをデータベースに保存し、 SQLを介して照会するためのサポートを導入します。 .. Note Important]:: このセクションでは、PostGISに精通していることを前提として、CloudNativePGを介してKubernetesでPostGISデータベースを使用して新しいPostgreSQLクラスターを作成する方法に関する基本情報を提供します。 サポートされているインストール方法 ---------------------------------- 環境PostgreSQLバージョン、Kubernetesバージョン、およびCloudNativePGバージョンによっては、PostGISをプロビジョニングする2つの主な方法があります。 1. :ref:`**Image Volume Extensions** <#method-1-image-volume-extensions>` 拡張バイナリを読み取り専用ボリュームとしてOCIイメージから直接マウントしますPG 18+およびKubernetes 1.35+で推奨。 2. :ref:`**PostGIS Operand Images** ` すでにPostGISライブラリを含む事前構築されたPostgreSQLイメージを使用します。 以下のいずれかの方法を使用してPostGISがシステムにプロビジョニングされた後、データベース内で有効にして管理する必要があります以下の :ref:`拡張機能の有効化 <拡張機能の有効化>` セクションを参照してください。 方法1イメージボリューム拡張 --------------------------- **PostgreSQL 18** および **Kubernetes 1.35** ``ImageVolume`` 機能ゲートが有効になっている1.33および1.34以降、 :ref:`イメージボリューム拡張を使用したイメージカタログ <イメージボリューム拡張を使用したイメージカタログ>` を活用できます。 これは、拡張機能のOCIイメージのコンテンツを読み取り専用ボリュームとしてPostgresコンテナに直接マウントすることにより、公式の最小限のPostgreSQLイメージを使用し、実行時にPostGISを「プラグイン」できるため、拡張機能を管理する最新の方法です。これにより、拡張機能のライフサイクルがベースのPostgreSQLイメージから分離され、オペランドイメージをスリムで安全な状態に保ちます。 CloudNativePGコミュニティは、 `postgres-extensions-containers `_ を介してPostGISのスタンドアロン拡張コンテナイメージを配布します リポジトリ。 イメージカタログを介してCloudNativePG 1.29+の場合 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CloudNativePG 1.29から、 :ref:`image catalogs with image volume extensions ` を利用できます これらのバージョンの管理を自動化します。 :ref:`image volume extensions page ` を参照してください ``postgis`` キーを使用して、PostgreSQLクラスターに拡張機能を追加する方法については、 .. code:: yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-postgis spec: # ... imageCatalogRef: apiGroup: postgresql.cnpg.io kind: ClusterImageCatalog name: postgresql-minimal-trixie major: 18 postgresql: extensions: # ... - name: postgis # ... ``Cluster`` リソースに直接 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 次の例は、 ``Cluster`` リソースに拡張機能を直接ロードすることにより、 PostGIS 3.6.2をPostgreSQL 18クラスターに追加する方法を示しています。 .. code:: yaml 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 .. Note:: `postgres-extensions-containers `_ を参照してください。 この拡張機能の最新バージョンと手順のプロジェクト。 方法2 PostGISオペランド画像 --------------------------- 専用の\ ``postgis-containers`` レジストリを使用し続けたいユーザー、またはイメージボリューム拡張をサポートしていないPostgreSQLまたはKubernetesの古いバージョンを使用しているユーザーの場合、コミュニティはプリインストールされたPostGIS `PostgreSQL Container images `_ の上にビルドされてイメージの維持を続けています。 詳細については、次をご覧ください。 - `postgis-containers `_ - `postgis-containers `_ この方法を使用するには、 ``.spec.imageName`` で目的のPostGIS対応画像をポイントします。 .. code:: yaml 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`` リソースを使用すると、バージョンのアップグレードを含む拡張機能のライフサイクルの宣言的管理が可能になります。 .. Note:: 詳細については、 :ref:`データベース内の拡張機能の管理 <データベース内の拡張機能の管理>` を参照してください。 .. code:: yaml 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の利用可能なバージョンを簡単に確認できます。例 .. code:: bash kubectl cnpg psql cluster-postgis -- app -c \ "SELECT * FROM pg_available_extensions WHERE name ~ ^postgis ORDER BY 1" これに似たものを返しますこのドキュメントのものとは異なる値を取得する場合があります。 .. code:: console 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`` データベースに正しくインストールされていることを確認します。 .. code:: bash kubectl cnpg psql cluster-postgis -- app -c \dx コマンドは次のようなものを返します。 .. code:: console 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) 最後に .. code:: bash kubectl cnpg psql cluster-postgis -- app -c SELECT postgis_full_version() 戻る .. code:: console 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)