12.3 PostGIS
PostGIS는 PostgreSQL에 지리 정보 시스템(GIS) 기능을 더하는 대표적인 확장이다. 좌표·도형 같은 공간 데이터 타입과 공간 인덱스, 공간 질의 함수를 제공한다. PostGIS는 여러 관련 라이브러리와 함께 동작하므로, 기본 PostgreSQL 이미지에는 그 바이너리가 들어 있지 않다. CloudNativePG에서 PostGIS를 쓰려면 먼저 바이너리를 클러스터에 실어야 하고, 그다음 데이터베이스에 extension을 켠다.
바이너리를 싣는 길은 두 갈래다. 새 환경에서는 image volume으로 extension을 얹는 방식을, 그 이전 환경에서는 PostGIS가 미리 담긴 operand 이미지를 쓴다.
flowchart TD
START["PostGIS 사용"] --> Q{"PG 18+ / K8s 1.35+?"}
Q -->|"예"| VOL["image volume<br/>extension 얹기"]
Q -->|"아니오"| IMG["PostGIS operand<br/>이미지 사용"]
VOL --> DB["Database 리소스로<br/>extension 선언"]
IMG --> DB
DB --> VERIFY["설치 검증"]
바이너리 싣기
방법 1: image volume extension (권장)
PostgreSQL 18 이상, Kubernetes 1.35 이상이라면 PostGIS 바이너리를 read-only 볼륨으로 마운트하는 image volume 방식을 쓴다. extension의 생애주기를 기본 PostgreSQL 이미지에서 떼어 낼 수 있다는 것이 장점이다.
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-postgis
spec:
imageName: ghcr.io/cloudnative-pg/postgresql:18.4-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방법 2: PostGIS operand 이미지
더 낮은 PostgreSQL·Kubernetes 버전에서는 PostGIS가 이미 담긴 이미지를 imageName으로 지정한다.
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-postgis
spec:
instances: 1
imageName: ghcr.io/cloudnative-pg/postgis:18.4-3.6.2-system-trixie
storage:
size: 1Giextension 켜기
바이너리가 실렸다고 바로 쓸 수 있는 것은 아니다. 데이터베이스마다 CREATE EXTENSION으로 켜야 한다. CloudNativePG에서는 Database 리소스에 선언해 operator가 관리하게 한다.
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_topologyversion을 명시하는 것을 권한다. CloudNativePG는 선언된 버전과 실제 버전이 다르면 ALTER EXTENSION을 실행해 자동으로 맞춘다. 버전을 적어 두면 업그레이드 경로가 선언적으로 통제된다.설치 검증
extension이 제대로 올라왔는지 psql로 확인한다.
-- 설치 가능한 postgis 계열 확인
SELECT * FROM pg_available_extensions WHERE name ~ '^postgis';
-- 현재 켜진 extension 목록
\dx
-- PostGIS 전체 버전 정보
SELECT postgis_full_version();정리
- PostGIS는 공간 데이터 타입·인덱스·함수를 더하는 확장 — 기본 이미지엔 바이너리 없음
- 바이너리 싣기: PG 18+/K8s 1.35+는 image volume extension, 그 이전은 PostGIS operand 이미지
- extension은
Database리소스에 선언해 선언적으로 켠다 —version명시 권장 pg_available_extensions·\dx·postgis_full_version()으로 설치 확인
다음 절에서는 operator와 클러스터 사이 연결, 그리고 NetworkPolicy로 트래픽을 격리하는 networking을 본다.