Release notes for CloudNativePG 1.25
History of user-visible changes in the 1.25 minor release of CloudNativePG.
For a complete list of changes, please refer to the commits on the release branch in GitHub.
Version 1.25.4
Release date: Oct 23, 2025
Warning
This is the final release in the 1.25.x series. Users are strongly encouraged to upgrade to a newer minor version, as 1.25 is no longer supported.
Changes
-
Adopted the new format of
postgres-containersandpostgis-containersimages and image catalog artifacts, and updated the default PostgreSQL version to18.0-system-trixie(PostgreSQL 18 is now supported). (#8578, #8760, #8558) -
Deprecated the
monitoring.enablePodMonitorfield in theClusterandPoolerresources. This field will be removed in a future release. Users who rely onPodMonitorresources should create them manually instead. (#8753)
Enhancements
-
Added support for overriding the PgBouncer
auth_type,server_tls_sslmode, andclient_tls_sslmodesettings, which were previously hardcoded. Default values remain consistent with the former behavior but can now be customized when required. (#8674) -
Added a
CHECKPOINTstep before PostgreSQL smart and fast shutdowns to reduce shutdown duration and replica promotion time, especially on systems with a highcheckpoint_timeout. (#8867) -
Added a warning in the instance manager for deprecated or unsupported OS versions, based on the official
postgres-containersproject. (#8601) -
Improved certificate parsing error reporting. Failures now log specific errors instead of a generic message, aiding troubleshooting. This is particularly relevant after the CVE-2025-58187 fix in Go 1.25.2 and 1.24.8, which may trigger parsing failures for invalid DNS SANs. (#8801)
-
Added a check to ensure the destination WAL archive path is empty when bootstrapping a cluster using the
pg_basebackupmethod, consistent with other bootstrap methods. (#8895) -
Added validation to prevent backups from running on hibernated clusters. Backups attempted on such clusters now fail with reason
ClusterIsHibernated, following the standard prerequisite check pattern. (#8870) -
Added support for
pprofprofiling. Instances can now enable thepproftool by adding thealpha.cnpg.io/enableInstancePprofannotation to theClusterresource for advanced debugging. (#7876) -
cnpgplugin: -
Updated the Flexible I/O Tester (FIO) image to
wallnerryan/fiotools-aio:v2, as provided by Ryan Wallner. (#8847) -
Enhanced the
cnpg status backupcommand to provide more detailed status information when using abarman-cloud-based backup plugin. (#8780, #8690)
Fixes
-
Fixed backup restoration failures when using custom WAL segment sizes with parallel WAL recovery. The operator no longer manages the end-of-WAL file marker during restoration, preventing errors when backups span multiple WAL segments. (#8873)
-
Fixed a bug in major upgrades where a volume snapshot from a previous minor version could be incorrectly used to optimize replica creation. (#8475)
-
Fixed
initdbto wait for the application user secret before bootstrapping a new cluster, preventing potential race conditions. (#8663) -
Fixed the connection retry logic in the
cnpgiplugin. The reconciliation loop now detects connection pool changes correctly and uses exponential backoff to reduce "closed pool" errors. (#8554) -
Fixed volume snapshot usage during replica scaling to work with backup plugins. Previously, this optimization was only available with the in-tree backup implementation, but now clusters using backup plugins can also leverage volume snapshots when creating new replicas. (#8506)
-
Fixed the
Poolertemplating to correctly inherit settings for the bootstrap controller init container. (#8394) -
Fixed webhook errors to use the correct API group (
postgresql.cnpg.io) inPoolerand backup webhooks, ensuring consistent API error reporting. (#8485) -
Fixed a potential nil pointer dereference in the hibernation reconciler when handling errors. Contributed by @PascalBourdier. (#8756)
-
Fixed an issue in the environment cache where callers could inadvertently modify shared data. The
LoadEnvfunction now returns a copy of cached environment slices to prevent mutations from affecting the cache. (#8880)
Version 1.25.3
Release date: Jul 25, 2025
In memory of DJ Walker-Morgan.
Changes
- Removed
386and ARM (v5/v6/v7) architectures from thecnpgplugin build matrix, reducing the number of published binaries (#7648).
Enhancements
-
Improved validation of
shared_buffersby correctly consideringHugePagessettings, ensuring accurate memory configuration checks (#7864). -
Set
oom_score_adjfor PostgreSQL worker processes to improve prioritization during out-of-memory situations (#7891). -
Added
fqdn-uriandfqdn-jdbc-urifields in user secrets to simplify application connection string management and align with DNS-based connection best practices (#7852). -
Added the
systemIDfield and related condition in theClusterstatus to track the PostgreSQL system identifier. (#7717).
Fixes
-
Added a mutex in the connection pooler to protect concurrent access to the connections map, improving stability in high-concurrency environments (#7804).
-
Fixed replica cluster instance ordering by correctly detecting the designated primary, improving replica cluster stability and switchover operations (#8108).
-
Added support for reconciling
VolumeAttributesClassfor PVCs, enhancing storage compatibility and lifecycle management (#7885). -
Made the internal webserver routines non-blocking to improve responsiveness under load (#8071).
-
Fixed an issue where the
ensureReplicationClientLeafCertificateerror did not display the correctsecretNamein the not found message (#8086). -
Prevented invalid
ALTER SUBSCRIPTIONstatements by updating only PostgreSQL‑supported parameters; unsupported options likecopy_dataare ignored to avoid reconciliation failures (7844). -
Fixed an issue where the
bootstrap-controllerin the connection pooler did not applyresourcessettings correctly (#7922). -
Ensured online backups fail cleanly if the
targetPodbecomes unhealthy during backup, preventing partial or misleading backups (#7944). -
Ensured the Backup resource status is set properly after a failure, improving observability and scripting reliability (#7898).
Version 1.25.2
Release date: May 23, 2025
Important Changes
- CloudNativePG is now officially a CNCF project: CloudNativePG has been accepted into the Cloud Native Computing Foundation (CNCF), marking a significant milestone in its evolution. As part of this transition, the project is now governed under CloudNativePG, a Series of LF Projects, LLC, ensuring long-term sustainability and community-driven innovation. (#7203)
Enhancements
-
Added the
KUBERNETES_CLUSTER_DOMAINconfiguration option to the operator, allowing users to specify the domain suffix for fully qualified domain names (FQDNs) generated within the Kubernetes cluster. If not set, it defaults tocluster.local. (#6989) -
Implemented the
cnpg.io/validationannotation, enabling users to disable the validation webhook on CloudNativePG-managed resources. Use with caution, as this allows unrestricted changes. (#7196) -
Added support for collecting
pg_stat_walmetrics in PostgreSQL 18. (#7005) -
Added support for LZ4, XZ, and Zstandard compression methods when archiving WAL files via Barman Cloud (deprecated). (#7151)
-
CloudNativePG Interface (CNPG-I):
-
A plugin can now trigger instance rollouts by implementing the
EVALUATEverb, ensuring that plugin-induced changes are properly reconciled. (#7126) -
Introduced support for WAL recovery via CNPG-I plugins during snapshot restore. (#7284)
Security
- Set
imagePullPolicytoAlwaysfor the operator deployment to ensure that images are always pulled from the registry, reducing the risk of using outdated or potentially unsafe local images. (#7250)
Fixes
-
Fixed native replication slot synchronization and logical replication failover for PostgreSQL 17 by appending the
dbnameparameter toprimary_conninfoin replica configurations (#7298). -
Fixed a regression in WAL restore operations that prevented fallback to the in-tree
barmanObjectStoreconfiguration defined in theexternalClustersource when a plugin failed to locate a WAL file (#7507). -
Improved backup efficiency by introducing a fail-fast mechanism in WAL archiving, allowing quicker detection of unexpected primary demotion and avoiding unnecessary retries (#7483).
-
Fixed an off-by-one error in parallel WAL archiving that could cause one extra worker process to be spawned beyond the requested number (#7389).
-
Resolved a race condition that caused the operator to perform two switchovers when updating the PostgreSQL configuration. (#6991)
-
Corrected the
PodMonitorconfiguration by adjusting thematchLabelsscope for the targeted pooler and cluster pods. Previously, thematchLabelswere too broad, inadvertently inheriting labels from the cluster and leading to data collection from unintended targets. (#7063) -
Added a webhook warning for clusters with a missing unit (e.g., MB, GB) in the
shared_buffersconfiguration. This will become an error in future releases. Users should update their configurations to include explicit units (e.g.,512MBinstead of512). (#7160) -
Treated timeout errors during volume snapshot creation as retryable to prevent unnecessary backup failures. (#7010)
-
Moved the defaulting logic for
.spec.postgresql.synchronous.dataDurabilityfrom the CRD to the webhook to avoid UI issues with OLM. (#7600) -
CloudNativePG Interface (CNPG-I):
-
Implemented automatic reloading of TLS certificates for plugins when they change. (#7029)
-
Ensured the operator properly closes the plugin connection when performing a backup using the plugin. (#7095, #7096)
-
Improved performance and resilience of CNPG-I by removing timeouts for local plugin operations, avoiding failures during longer backup or WAL archiving executions (#7496).
-
cnpgplugin: -
Increased the buffer size in the
logs prettycommand to better handle larger log output (#7281). -
Ensured the
plugin-nameparameter is required for plugin-based backups and disallowed for non-plugin backup methods (#7506). -
Ensured that the primary Pod is recreated during an imperative restart when
primaryUpdateMethodis set torestart, aligning its definition with the replicas. (#7122)
Changes
-
Updated the default PostgreSQL version to 17.5 for new cluster definitions. (#7556)
-
Updated the default PgBouncer version to 1.24.1 for new
Poolerdeployments (#7399).
Version 1.25.1
Release Date: February 28, 2025
Enhancements
- Introduced a startup probe for the operator to enhance reliability and prevent premature liveness probe failures during initialization. (#7008)
- Added support for using the
-rservice with the Pooler. (#6868) - Introduced an optional
--ttlflag for thepgbenchplugin, enabling automatic deletion of completed jobs after a user-defined duration. (#6701) - Marked known error messages from the Azure CSI Driver for volume snapshots as retryable, improving resilience. (#6906)
- Updated the default PostgreSQL version to 17.4 for new cluster definitions. (#6960)
Security
- The operator image build process has been enhanced to strengthen
security and transparency. Images are now signed with
cosign, and OCI attestations are generated, incorporating the Software Bill of Materials (SBOM) and provenance data. Additionally, OCI annotations have been added to improve traceability and ensure the integrity of the images.
Bug Fixes
- Fixed inconsistent behavior in default probe knob values when
.spec.probesis defined, ensuring users can override all settings, includingfailureThreshold. If unspecified in the startup probe,failureThresholdis now correctly derived from.spec.startupDelay / periodSeconds(default:10, now overridable). The same logic applies to liveness probes via.spec.livenessProbeTimeout. (#6656) - Managed service ports now take precedence over default operator-defined ports. (#6474)
- Fixed an issue where WAL metrics were unavailable after an instance restart until a configuration change was applied. (#6816)
- Fixed an issue in monolithic database import where role import was skipped if no roles were specified. (#6646)
- Added support for new metrics introduced in PgBouncer 1.24. (#6630)
- Resolved an issue where
Database,Publication, andSubscriptionCRDs became stuck incluster resource has been deleted, skipping reconciliationafter cluster rehydration. This patch forcesstatus.observedGenerationto zero, ensuring proper reconciliation. (#6607) - Improved handling of replication-sensitive parameter reductions by ensuring timely reconciliation after primary server restarts. (#6440)
- Introduced a new
isWALArchiverflag in the CNPG-I plugin configuration, allowing users to designate a plugin as a WAL archiver. This enables seamless migration from in-tree Barman Cloud support to the plugin while maintaining WAL archive consistency. (#6593) - Ensured
override.confis consistently included inpostgresql.confduring replica cluster bootstrapping, preventing replication failures due to missing configuration settings. (#6808) - Ensured
override.confis correctly initialized before invokingpg_rewindto prevent failures during primary role changes. (#6670) - Enhanced webhook responses to return both warnings and errors when applicable, improving diagnostic accuracy. (#6579)
- Ensured the operator version is correctly reconciled. (#6496)
- Improved PostgreSQL version detection by using a more precise check of the data directory. (#6659)
- Volume Snapshot Backups:
- Fixed an issue where unused backup connections were not properly cleaned up. (#6882)
- Ensured the instance manager closes stale PostgreSQL connections left by failed volume snapshot backups. (#6879)
- Prevented the operator from starting a new volume snapshot backup while another is already in progress. (#6890)
cnpgplugin:- Restored functionality of the
promoteplugin command. (#6476) - Enhanced
kubectl cnpg report --logs <cluster>to collect logs from all containers, including sidecars. (#6636) - Ensured
pgbenchjobs can run when aClusteruses anImageCatalog. (#6868)
- Restored functionality of the
Technical Enhancements
- Added support for Kubernetes
client-gen, enabling automated generation of Go clients for all CloudNativePG CRDs. (#6695)
Version 1.25.0
Release Date: December 23, 2024
Features
-
Declarative Database Management: Introduce the
DatabaseCustom Resource Definition (CRD), enabling users to create and manage PostgreSQL databases declaratively within a cluster. (#5325) -
Logical Replication Management: Add
PublicationandSubscriptionCRDs for declarative management of PostgreSQL logical replication. These simplify replication setup and facilitate online migrations to CloudNativePG. (#5329) -
Experimental Support for CNPG-I: Introducing CNPG-I (CloudNativePG Interface), a standardized framework designed to extend CloudNativePG functionality through third-party plugins and foster the growth of the CNPG ecosystem. The Barman Cloud Plugin serves as a live example, illustrating how plugins can be developed to enhance backup and recovery workflows. Although CNPG-I support is currently experimental, it offers a powerful approach to extending CloudNativePG without modifying the operator’s core code—akin to PostgreSQL extensions. We welcome community feedback and contributions to shape this exciting new capability.
Enhancements
- Add the
dataDurabilityoption to the.spec.postgresql.synchronousstanza, allowing users to choose betweenrequired(default) orpreferreddurability in synchronous replication. (#5878) - Enable customization of startup, liveness, and readiness probes through the
.spec.probesstanza. (#6266) - Support additional
pg_dumpandpg_restoreoptions to enhance database import flexibility. (#6214) - Add support for
maxConcurrentReconcilesin the CloudNativePG controller and set the default to 10, improving the operator's ability to efficiently manage larger deployments out of the box. (#5678) - Add the
cnpg.io/userTypelabel to secrets generated for predefined users, specificallysuperuserandapp. (#4392) - Improved validation for the
spec.schedulefield in ScheduledBackups, raising warnings for potential misconfigurations. (#5396) cnpgplugin:- Enhance the
backupcommand to support plugins. (#6045) - Honor the
User-Agentheader in HTTP requests with the API server. (#6153)
- Enhance the
Bug Fixes
- Ensure the former primary flushes its WAL file queue to the archive before re-synchronizing as a replica, reducing recovery times and enhancing data consistency during failovers. (#6141)
- Clean the WAL volume along with the
PGDATAvolume during bootstrap. (#6265) - Update the operator to set the cluster phase to
Unrecoverablewhen all previously generatedPersistentVolumeClaimsare missing. (#6170) - Fix the parsing of the
synchronous_standby_namesGUC when.spec.postgresql.synchronous.methodis set tofirst. (#5955) - Resolved a potential race condition when patching certain conditions in CRD statuses, improving reliability in concurrent updates. (#6328)
- Correct role changes to apply at the transaction level instead of the database context. (#6064)
- Remove the
primary_slot_namedefinition from theoverride.conffile on the primary to ensure it is always empty. (#6219) - Configure libpq environment variables, including
PGHOST, in PgBouncer pods to enable seamless access to thepgbouncervirtual database usingpsqlfrom within the container. (#6247) - Remove unnecessary updates to the Cluster status when verifying changes in the image catalog. (#6277)
- Prevent panic during recovery from an external server without proper backup configuration. (#6300)
- Resolved a key collision issue in structured logs, where the name field was inconsistently used to log two distinct values. (#6324)
- Ensure proper quoting of the inRoles field in SQL statements to prevent syntax errors in generated SQL during role management. (#6346)
cnpgplugin:- Ensure the
kubectlcontext is properly passed in thepsqlcommand. (#6257) - Avoid displaying physical backups block when empty with
statuscommand. (#5998)
- Ensure the
Supported Versions
- Kubernetes: 1.32, 1.31, 1.30, and 1.29
- PostgreSQL: 17, 16, 15, 14, and 13
- Default image: PostgreSQL 17.2
- Officially dropped support for PostgreSQL 12
- PostgreSQL 13 support ends on November 12, 2025