PostGIS¶
PostGISクラスター は、PostgreSQL用の非常に人気のあるオープンソース拡張機能であり、データベースにGIS(地理情報システム)オブジェクトを保存し、
SQLを介してクエリを実行するためのサポートを導入します。
重要
このセクションでは、読者がPostGISに精通していることを前提としており、CloudNativePGを介してKubernetesでPostGISデータベースを使用して新しいPostgreSQLクラスターを作成する方法に関する基本情報を提供します。
CloudNativePGコミュニティは、公式の PostGIS images hosted on DockerHub 上に構築されたコンテナイメージを維持しています。詳細については、次をご覧ください。
PostGISクラスターに関する基本概念¶
概念的には、 PostGISベースのPostgreSQLクラスター(または単にPostGISクラスター)は、他のPostgreSQLクラスターと同様です。唯一の違いは次のとおりです。
PostGISおよび関連ライブラリのシステム内の存在
PostGISエクステンションのデータベース内の存在
- CloudNativePGはイミュータブルアプリケーションコンテナに基づいているため、PostGISをプロビジョニングする唯一の方法は、オペランドに使用するコンテナイメージに追加することです。
コンテナイメージの要件 は、これを達成する方法に関する詳細な手順を提供します。より簡単には、以下の例のように、コミュニティのPostGISコンテナイメージを使用できます。
2番目のステップでは、PostgreSQLデータベースに拡張機能をインストールします。これは2つの方法で行うことができます。
マイクロサービスアーキテクチャに従ってクラスターでホストするメインかつおそらく唯一のデータベースであるアプリケーションデータベースにインストールする、または
インスタンスが複数のデータベースで共有されるモノリスアーキテクチャを採用する場合、クラスター内で作成するすべてのデータベースで利用できるように
template1データベースにインストールします
注釈
データベース内のマイクロサービスとモノリスアーキテクチャの詳細については、 How many databases should be hosted in a single PostgreSQL instance? を参照してください
または Database import 。
PostGISで新しいPostgreSQLクラスターを作成する¶
PostGIS 3.2で新しいPostgreSQL 14クラスターを作成したいとしましょう。
最初のステップは、オペランドに正しいPostGISコンテナイメージを使用し、
Cluster リソースに.spec.imageName
オプションを適切に設定することです。
は
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgis-example
spec:
instances: 3
imageName: ghcr.io/cloudnative-pg/postgis:14
bootstrap:
initdb:
postInitTemplateSQL:
- CREATE EXTENSION postgis;
- CREATE EXTENSION postgis_topology;
- CREATE EXTENSION fuzzystrmatch;
- CREATE EXTENSION postgis_tiger_geocoder;
storage:
size: 1Gi
以下は、PostGISクラスターの作成を行う方法に関するいくつかのガイダンスを提供します。
警告
CloudNativePGには構成よりも規約が適用されますが、実稼働用にシステムの構成とチューニングに時間を費やす必要があることを考慮してください。また、以下の例の`imageName` は、PostgreSQL 14で利用可能な最新のイメージを意図的に指し示しています。
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgis-example
spec:
instances: 3
imageName: ghcr.io/cloudnative-pg/postgis:14
bootstrap:
initdb:
postInitTemplateSQL:
- CREATE EXTENSION postgis;
- CREATE EXTENSION postgis_topology;
- CREATE EXTENSION fuzzystrmatch;
- CREATE EXTENSION postgis_tiger_geocoder;
storage:
size: 1Gi
この例は、アプリケーションデータベース(app
と呼ばれます)を実際に作成する前に、 template1
データベースに対してクエリのリストを実行するpostInitTemplateSQL
オプションに依存しています。つまり、マニフェストを適用してクラスターが起動すると、上記の拡張機能がテンプレートデータベースとアプリケーションデータベースの両方にインストールされ、使用できるようになります。
注釈
少し時間を取って、 postInitApplicationSQL など、 APIリファレンス の .spec.bootstrap.initdb で使用可能なオプションを調べます。
app
データベースに接続することにより、コンテナ内にあるPostGISの利用可能なバージョンを簡単に確認できます(このドキュメントの値とは異なる値を取得する場合があります)。
$ kubectl exec -ti postgis-example-1 -- psql app
Defaulted container "postgres" out of: postgres, bootstrap-controller (init)
psql (15.3 (Debian 15.3-1.pgdg110+1))
Type "help" for help.
app=# SELECT * FROM pg_available_extensions WHERE name ~ ^postgis ORDER BY 1;
name | default_version | installed_version | comment
- -------------------------+-----------------+-------------------+------------------------------------------------------------
postgis | 3.2.2 | 3.2.2 | PostGIS geometry and geography spatial types and functions
postgis-3 | 3.2.2 | | PostGIS geometry and geography spatial types and functions
postgis_raster | 3.2.2 | | PostGIS raster types and functions
postgis_raster-3 | 3.2.2 | | PostGIS raster types and functions
postgis_sfcgal | 3.2.2 | | PostGIS SFCGAL functions
postgis_sfcgal-3 | 3.2.2 | | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.2.2 | 3.2.2 | PostGIS tiger geocoder and reverse geocoder
postgis_tiger_geocoder-3 | 3.2.2 | | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.2.2 | 3.2.2 | PostGIS topology spatial types and functions
postgis_topology-3 | 3.2.2 | | PostGIS topology spatial types and functions
(10 rows)
次のステップは、 postInitTemplateSQL
セクションにリストされている拡張機能がapp
データベースに正しくインストールされていることを確認することです。
app=# \dx
List of installed extensions
Name | Version | Schema | Description
- -----------------------+---------+------------+------------------------------------------------------------
fuzzystrmatch | 1.1 | public | determine similarities and distance between strings
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 3.2.2 | public | PostGIS geometry and geography spatial types and functions
postgis_tiger_geocoder | 3.2.2 | tiger | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.2.2 | topology | PostGIS topology spatial types and functions
(5 rows)
最後に:
app=# SELECT postgis_full_version();
postgis_full_version
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="3.2.2 628da50" [EXTENSION] PGSQL="140" GEOS="3.9.0-CAPI-1.16.2" PROJ="7.2.1" LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY
(1 row)