For installation instructions check out the getting started guide.
Added
- postgres_cdc: Added support for control signals in PostgreSQL CDC by detecting and forwarding rows inserted into a configurable signal table downstream like regular messages. (@josephwoodward, #4637)
- iceberg: Added an opt-in
merge_strategy: copy-on-writefor row-levelupsert/delete, which materialises mutations by rewriting whole data files so the table only ever contains plain data files. This makes mutations readable by engine-backed catalogs that cannot handle merge-on-read equality deletes, such as the Databricks Unity Catalog and Snowflake. The default remainsmerge-on-read. (@Jeffail, #4666) - iceberg: Added a
commit.cleanup_on_failurefield (defaulttrue) to disable connector-side cleanup of files written by failed commits, as an escape hatch for incident recovery. Disabling it can only leak orphan files, which regular orphan-file maintenance reclaims. (@Jeffail, #4666)
Fixed
- iceberg: Fixed a regression introduced in 4.99.0 where a commit that landed server-side but was reported as failed (ambiguous 5xx, timeout, lost acknowledgement, or an unclassified error) had its just-written parquet files deleted by the failure-path cleanup, leaving the table unreadable. Failure cleanup is now gated on a provable catalog rejection, and commits detected as landed are reported as success, which also prevents the duplicate rows that redelivery produced. (@Jeffail, #4666)
- iceberg: Fixed no-timezone
timestampcolumns being written to parquet withisAdjustedToUTC=true, which is spec-incorrect and made them read back astimestamptz. New tables are written correctly; the encoding is pinned per table via aredpanda-connect.timestamp-encodingproperty so an existing table never changes or mixes encodings. (@Jeffail, #4666) - iceberg: Fixed commits failing against catalogs that prohibit clients setting particular table properties (for example the Databricks Unity Catalog and
schema.name-mapping.default) by learning the prohibited keys from the catalog's rejection and stripping them from subsequent commits. (@Jeffail, #4666) - iceberg: Fixed several
identifier_fieldsvalue shapes that silently matched no rows onupsert/delete— non-UTCtimevalues, decimal floating-point ties, and[]bytevalues for string key columns — and fixed base64 mangling of binary and fixed column values during copy-on-write rewrites. All write paths now share a single value canonicaliser with the insert path. (@Jeffail, #4666)
Change
- oracledb_cdc: Snapshot performance improvements by reusing seeded schema metadata @josephwoodward, #4695)
- iceberg: Merge-key input strictness now matches the insert path: string-typed values for integer and boolean key columns (for example
{"id": "42"}against aBIGINTkey) previously matched by accident and are now rejected with an actionable error, and nanosecond-precision timestampidentifier_fieldsare now rejected undermerge-on-readas they already were under copy-on-write. A table whosewrite.delete.modeproperty is explicitlymerge-on-readalso now rejectscopy-on-writemutations rather than silently overriding the property. (@Jeffail, #4666)
The full change log can be found here.