Release notes for CloudNativePG 1.28
History of user-visible changes in the 1.28 minor release of CloudNativePG.
For a complete list of changes, please refer to the commits on the release branch in GitHub.
Version 1.28.0-rc1
Release date: Nov 7, 2025
Features
-
Quorum-Based Failover Promoted to Stable: Promoted the quorum-based failover feature, introduced experimentally in 1.27.0, to a stable API. This data-driven failover mechanism is now configured via the
spec.postgresql.synchronous.failoverQuorumfield, graduating from the previousalpha.cnpg.io/failoverQuorumannotation. (#8589) -
Declarative Foreign Data Management: Introduced comprehensive declarative management for Foreign Data Wrappers (FDW) by extending the
DatabaseCRD. This feature adds the.spec.fdwsand.spec.serversfields, allowing you to manage FDW extensions and their corresponding foreign servers directly from theDatabaseresource. This work was implemented by Ying Zhu (@EdwinaZhu) as part of the LFX Mentorship Program 2025 Term 2. (#7942, #8401)
Enhancements:
-
Enabled simultaneous image and configuration changes, allowing you to update the container image (including PostgreSQL version or extensions) and PostgreSQL configuration settings in the same operation. The operator first applies the image change, followed by the configuration changes in a subsequent rollout, ensuring safe and consistent cluster updates. (#8115)
-
Introduced
securityContextat the pod level andcontainerSecurityContextfor individual containers (includingpostgres,init, and sidecars). This provides granular control over security settings, replacing the previous cluster-widepostgresandoperatoruser settings. Contributed by @x0ddf. (#6614) -
Adopted standard Kubernetes recommended labels (e.g.,
app.kubernetes.io/name) for all resources generated by CloudNativePG (Clusters, Backups, Poolers, etc.). Contributed by @JefeDavis. (#8087) -
Introduced a new caching layer for user-defined monitoring queries to reduce load on the PostgreSQL database. (#8003)
-
Introduced the
alpha.cnpg.io/unrecoverable=trueannotation for replica pods. When applied, this annotation instructs the operator to permanently delete the instance by removing its Pod and PVCs, after which it will recreate the replica from the primary. (#8178) -
Enhanced PgBouncer integration by automatically setting
auth_dbnameto thepgbouncerdatabase, simplifying auth setup. (#8671) -
Allowed providing stage-specific
pg_restoreoptions (preRestore,postRestore,dataRestore) during database import. Contributed by @hanshal101. (#7690) -
Added the PostgreSQL
majorVersionto theBackupobject's status for easier identification and management. (#8464)
Security:
-
Allowed providing fine-grained custom TLS configurations for PgBouncer. The
PoolerCRD was extended withclientTLSSecret,clientCASecret,serverTLSSecret, andserverCASecretfields under.spec.pgbouncer. These fields enable users to supply their own certificates for both client-to-pooler and pooler-to-server connections, taking precedence over the operator-generated certificates. (#8692) -
Added optional TLS support for the operator's metrics server (port 8080). This feature is opt-in and enabled by setting the
METRICS_CERT_DIRenvironment variable, which instructs the operator to look fortls.crtandtls.keyfiles in the specified directory. When unset, the server continues to use HTTP for backward compatibility. (#8997) -
Enabled
cnpg report operatorto work with minimal permissions by making only the operator deployment required. All other resources (pods, secrets, config maps, events, webhooks, and OLM data) are now optional and collected on a best-efforts basis. The command gracefully handles permission errors for those resources by logging clear warnings and continuing report generation with available data, rather than failing completely. This enables least-privileged access, where users may have limited, namespace-scoped permissions. (#8982)
Fixes:
-
Fixed the
CREATE PUBLICATIONSQL generation for multi-table publications to be backward-compatible with PostgreSQL 13+. The previously generated syntax was only valid for PostgreSQL 15+ and caused syntax errors on older versions. (#8888) -
Fixed backup failures in complex pod definitions by reliably selecting the
postgrescontainer by name instead of by index. (#8964) -
cnpgplugin:- Fixed bugs in
cnpg reportlog collection, especially when fetching previous logs. The collector now correctly fetches previous and current logs in separate requests and gracefully handles missing previous logs (e.g., on containers with no restart history), ensuring current logs are always collected. (#8992)
- Fixed bugs in
Supported versions
- Kubernetes 1.34, 1.33, and 1.32
- PostgreSQL 18, 17, 16, 15, and 14
- PostgreSQL 18.0 is the default image