This repository provides maintenance scripts for building immutable container images containing PostgreSQL extensions supported by CloudNativePG. These images are designed to integrate seamlessly with the image volume extensions feature in CloudNativePG.
extension_control_path feature)CloudNativePG actively maintains the following third-party extensions, provided they are maintained by their respective authors and distributed as Debian packages that comply with the Debian Free Software Guidelines (DFSG), from a trusted, auditable repository (see Extension Requirements).
| Extension | Description | Project URL | Maintained by |
|---|---|---|---|
| pgAudit | PostgreSQL audit extension | github.com/pgaudit/pgaudit | CNPG maintainers |
| pg_crash | Disruptive fault injection and chaos engineering extension | github.com/cybertec-postgresql/pg_crash | CNPG maintainers |
| pgvector | Vector similarity search for PostgreSQL | github.com/pgvector/pgvector | CNPG maintainers |
| PostGIS | Geospatial database extension for PostgreSQL | postgis.net/ | CNPG maintainers |
| TimescaleDB Apache-2 Edition | Time-series database for PostgreSQL (open source version) | github.com/timescale/timescaledb/ | @shusaan |
| wal2json | Logical decoding output plugin for PostgreSQL | github.com/eulerto/wal2json | @solidDoWant |
[!NOTE] PostGIS is licensed under GPL-2.0, which is not on the CNCF Allowlist. It predates this policy; the maintainers are filing a CNCF license exception for it. PostGIS is not a precedent for accepting further non-Allowlisted extensions.
Extensions are provided only for the OS versions already built by the
cloudnative-pg/postgres-containers project,
specifically Debian stable and oldstable.
Contributors are welcome to propose and maintain additional extensions.
The project adheres to the following frameworks:
GOVERNANCE.md.CODE_OF_CONDUCT.md.When proposing a new extension, the following criteria must be met:
main component (which by definition complies with
the DFSG), sourced from
a trusted, auditable repository.
The PostgreSQL Global Development Group (PGDG)
is the recommended source, but other Debian repositories are acceptable
provided they meet the same standards. This is a hard requirement for two
reasons: (a) Debian DEP-5 machine-readable copyright files are the mechanism
used to satisfy attribution obligations: they are copied into
/licenses/<pkg>/ in the final FROM scratch image at build time; (b)
DFSG compliance
guarantees that non-free components have been removed by the package
maintainers, ensuring license hygiene.pgvector and postgis folders).See Adding a New Extension for the full workflow on proposing and submitting a new extension.
CODEOWNERS file
adding the component owner(s) for the new extension folder. The PR is
reviewed, approved, and merged.If component owners decide to stop maintaining their extension, and no other contributors are found, the main project maintainers reserve the right to unconditionally remove that extension.
Each extension image tag follows this format:
<extension-name>:<ext_version>-<timestamp>-<pg_version>-<distro>
Example:
Building pgvector version 0.8.1 on PostgreSQL 18.0 for the trixie
distro, with build timestamp 202509101200, results in:
pgvector:0.8.1-202509101200-18-trixie
For convenience, rolling tags should also be published:
pgvector:0.8.1-18-trixie
pgvector:0.8.1-18-trixie
This scheme ensures:
postgres-containers base imagesEach extension image includes OCI-compliant labels for runtime inspection and tooling integration. These metadata fields enable CloudNativePG and other tools to identify the base PostgreSQL version and OS distribution.
| Label | Description | Example |
|---|---|---|
io.cloudnativepg.image.base.name |
Base PostgreSQL container image | ghcr.io/cloudnative-pg/postgresql:18-minimal-bookworm |
io.cloudnativepg.image.base.pgmajor |
PostgreSQL major version | 18 |
io.cloudnativepg.image.base.os |
Operating system distribution | bookworm |
io.cloudnativepg.image.sql.version |
PostgreSQL extension SQL version | 0.8.2 |
In addition to CloudNativePG-specific labels, all images include standard OCI annotations as defined by the OCI Image Format Specification:
| Label | Description |
|---|---|
org.opencontainers.image.created |
Image creation timestamp |
org.opencontainers.image.version |
Extension's package version |
org.opencontainers.image.revision |
Git commit SHA |
org.opencontainers.image.title |
Human-readable image title |
org.opencontainers.image.description |
Image description |
org.opencontainers.image.source |
Source repository URL |
org.opencontainers.image.licenses |
License identifier |
You can inspect these labels using container tools:
# Using docker buildx imagetools
docker buildx imagetools inspect <image> --raw | jq '.annotations'
# Using skopeo
skopeo inspect docker://<image> | jq '.Labels'
To simplify the deployment of PostgreSQL extensions, this project automatically
generates ClusterImageCatalog resources. These catalogs provide a curated
list of compatible extension images for PostgreSQL 18+ versions.
artifacts
project.minimal catalog and use the
catalog-minimal prefix (e.g., catalog-minimal-trixie.yaml).$ claude mcp add postgres-extensions-containers \
-- python -m otcore.mcp_server <graph>