PostGIS
=======
.. raw:: html
`PostGIS `_ は、 PostgreSQLの非常に人気のオープンソース拡張機能であり、
GIS地理情報システムオブジェクトをデータベースに保存し、
SQLを介して照会するためのサポートを導入します。
.. Important::
このセクションでは、PostGISに精通していることを前提として、CloudNativePGを介してKubernetesでPostGISデータベースを使用して新しいPostgreSQLクラスターを作成する方法に関する基本情報を提供します。
CloudNativePGコミュニティは、公式の :ref:`PostGIS images hosted on DockerHub `
上にビルドされたコンテナイメージを維持します。詳細については、次をご覧ください。
- :ref:`postgis-containers `
- :ref:`postgis-containers `
PostGISクラスターに関する基本的な概念
-------------------------------------
概念的に、PostGISベースのPostgreSQLクラスターまたは単にPostGISクラスターは、他のPostgreSQLクラスターと似ています。唯一の違いは次のとおりです。
- PostGISおよび関連ライブラリのシステム内の存在
- PostGIS拡張機能のデータベース内の存在
CloudNativePGは不変アプリケーションコンテナに基づいているため、
PostGISをプロビジョニングする唯一の方法は、オペランドに使用するコンテナイメージに追加することです。
:ref:`コンテナイメージの要件 <コンテナイメージの要件>` は、これを実現する方法に関する詳細な手順を提供します。もっと簡単には、以下の例にあるように、コミュニティからのPostGISコンテナイメージを使用できます。
2番目のステップは、PostgreSQLデータベースに拡張機能をインストールすることです。これは2つの方法で行うことができます。
- アプリケーションデータベースにインストールします。これは、マイクロサービスアーキテクチャに従って、クラスターでホストするメインで唯一のデータベースです。または
- インスタンスが複数のデータベースで共有されるモノリスアーキテクチャを採用する場合、クラスター内に作成することになるすべてのデータベースで利用できるように、
``template1`` データベースにインストールします
.. Note::
データベース内のマイクロサービスとモノリスアーキテクチャの詳細については、 :ref:`How many databases should be hosted in a single PostgreSQL instance? <よくある質問FAQ>` を参照してください。
または :ref:`Database import ` 。
PostGISで新しいPostgreSQLクラスターを作成する
---------------------------------------------
PostGIS 3.2で新しいPostgreSQL 17クラスターを作成することにします。
最初のステップは、オペランドに適切なPostGISコンテナイメージを使用し、
``Cluster`` リソースの\ ``.spec.imageName``
オプションを適切に設定することです。
以下は、PostGISクラスターの作成を行う方法に関するガイダンスを提供します。
::
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgis-example
spec:
instances: 1
imageName: ghcr.io/cloudnative-pg/postgis:17
storage:
size: 1Gi
postgresql:
parameters:
log_statement: ddl
- --
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: postgis-example-app
spec:
name: app
owner: app
cluster:
name: postgis-example
extensions:
- name: postgis
- name: postgis_topology
- name: fuzzystrmatch
- name: postgis_tiger_geocoder
.. Warning::
CloudNativePGでは構成より規約が適用されますが、本番用にシステムの構成とチューニングに時間を費やす必要があることを考慮してください。また、以下の例の`imageName` は、PostgreSQL 17の利用可能な最新のイメージを意図的にポイントしています。真の不変性を実現するには、特定のイメージ名、またはできればSHA256ダイジェストを使用する必要があります。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgis-example
spec:
instances: 1
imageName: ghcr.io/cloudnative-pg/postgis:17
storage:
size: 1Gi
postgresql:
parameters:
log_statement: ddl
- --
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: postgis-example-app
spec:
name: app
owner: app
cluster:
name: postgis-example
extensions:
- name: postgis
- name: postgis_topology
- name: fuzzystrmatch
- name: postgis_tiger_geocoder
この例では、 ``Database``
リソースの宣言的拡張管理を活用して、指定された拡張機能を\ ``app``
データベースに追加します。
.. Note::
詳細については、 :ref:`データベース内の拡張機能の管理 <データベース内の拡張機能の管理>` を参照してください。
``app``
データベースに接続することにより、コンテナ内にあるPostGISの利用可能なバージョンを簡単に確認できます。このドキュメントの値とは異なる値を取得する場合があります。
.. code:: console
$ kubectl cnpg psql postgis-example -- app
psql (17.5 (Debian 17.5-1.pgdg110+2))
Type "help" for help.
app=# SELECT * FROM pg_available_extensions WHERE name ~ ^postgis ORDER BY 1;
name | default_version | installed_version | comment
- -------------------------+-----------------+-------------------+------------------------------------------------------------
postgis | 3.5.2 | 3.5.2 | PostGIS geometry and geography spatial types and functions
postgis-3 | 3.5.2 | | PostGIS geometry and geography spatial types and functions
postgis_raster | 3.5.2 | | PostGIS raster types and functions
postgis_raster-3 | 3.5.2 | | PostGIS raster types and functions
postgis_sfcgal | 3.5.2 | | PostGIS SFCGAL functions
postgis_sfcgal-3 | 3.5.2 | | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.5.2 | 3.5.2 | PostGIS tiger geocoder and reverse geocoder
postgis_tiger_geocoder-3 | 3.5.2 | | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.5.2 | 3.5.2 | PostGIS topology spatial types and functions
postgis_topology-3 | 3.5.2 | | PostGIS topology spatial types and functions
(10 rows)
次のステップは、 ``Database``
リソースにリストされている拡張機能が\ ``app``
データベースに正しくインストールされていることを確認することです。
.. code:: console
app=# \dx
List of installed extensions
Name | Version | Schema | Description
- -----------------------+---------+------------+------------------------------------------------------------
fuzzystrmatch | 1.2 | public | determine similarities and distance between strings
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 3.5.2 | public | PostGIS geometry and geography spatial types and functions
postgis_tiger_geocoder | 3.5.2 | tiger | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.5.2 | topology | PostGIS topology spatial types and functions
(5 rows)
最後に
.. code:: console
app=# SELECT postgis_full_version();
postgis_full_version
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="3.5.2 dea6d0a" [EXTENSION] PGSQL="170" GEOS="3.9.0-CAPI-1.16.2" PROJ="7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db" (compiled against PROJ 7.2.1) LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY
(1 row)