Version 6.1.3¶
Released on 2026-02-03.
Warning
Do not use this version when upgrading from any previous version containing tables created before Version 5.5.0 as this may result in data loss!
If the cluster contains tables created before Version 5.5.0, after
upgrading to Version 6.1.3 certain actions on such tables like
deleting partitions, changing settings, rename, swap, etc. can lead to
corrupted table which causes all the data of the columns created
in versions before Version 5.5.0 to be shown as NULL. The bug
has been fixed in Version 6.1.4, so we highly recommend to avoid
upgrading to any earlier 6.1.x version.
Once already affected by the bug, existing data may be lost forever, while
new data (via INSERT or UPDATE) can be retrieved normally.
Note
If you are upgrading a cluster, you must be running CrateDB 5.0.0 or higher before you upgrade to 6.1.3.
We recommend that you upgrade to the latest 6.0 release before moving to 6.1.3.
A rolling upgrade from >= 6.0.2 to 6.1.3 is supported. Before upgrading, you should back up your data.
Warning
Tables that were created before CrateDB 5.x will not function with 6.x and must be recreated before moving to 6.x.x.
You can recreate tables using COPY TO and COPY FROM or by
inserting the data into a new table.
Table of contents
See the Version 6.1.0 release notes for a full list of changes in the 6.1 series.
Fixes¶
Fixed an issue that caused
INSERT INTOstatements into columns of typeARRAY(OBJECT(DYNAMIC))to fail with anUnsupportedFeatureException[null]if it resulted in the addition of new columns to the table schema and if the objects within the array contained mixed types like in[{"x": 1}, {"x": null}].Fixed an issue that allowed inserting
NULLvalues into child columns ofARRAY(OBJECT)columns despiteNOT NULLconstraint on those child columns if a sibling column had a value.Fixed an issue that prevented
ILIKEfrom matching records with text containing newline characters.Fixed an issue that could lead to a
Couldn't create executionContexts from [...] Can't handle Symbolerror when runningSELECTqueries involving expressions using multiple columns likeCASEand aLIMITclause.Changed hyperloglog_distinct to return
0instead ofNULLif using aFILTERclause that doesn’t match any records - to be consistent with a globalWHEREandCOUNT.Fixed a regression introduced in Version 6.1.0 that could lead to mixing partial success results with error message in the response from the
HTTPendpoint.Fixed an issue causing memory leaks if requests to the
HTTPendpoint failed due to a missing HBA entry or wrong credentials.Fixed an issue that caused direct memory under-accounting, potentially leading to an
OutOfMemoryErrorwhen a large result set was returned by theHTTPendpoint.Fixed a regression introduced with Version 6.0.0 that led to wrong results when mixing
CROSS JOINandINNER JOINon a condition with a CASE referring to one of the cross joined tables. e.g.:SELECT * FROM t1, t0 INNER JOIN (SELECT 1 AS col0) AS sub0 ON (CASE sub0.col0 WHEN sub0.col0 THEN t0.c0 ELSE false END)
Fixed an issue resulting in a non matching IS NULL predicate when NULL values are inserted into a new sub-column of a OBJECT column with dynamic mapping enabled. E.g.:
CREATE TABLE t (o OBJECT(DYNAMIC)); INSERT INTO t (o) VALUES ({"a": NULL}); SELECT * FROM t WHERE o['a'] IS NULL; -- now returns the row
Fixed a regression introduced in Version 6.0.0 that caused INSERT statements with writes into columns of type OBJECT(DYNAMIC) to fail with an NPE if a nested object value containing elements with
NULLvalues was inserted before. Example:CREATE TABLE t1 (obj OBJECT(DYNAMIC)); INSERT INTO t1 (obj) VALUES ({a = {b = NULL}}); INSERT INTO t1 (obj) VALUES ({a = {c = 1}});
Fixed an issue that caused under-accounting of memory usage of some queries stored in cache. It affected cache eviction that is depending on query memory usage, potentially leading to an
OutOfMemoryError.Fixed an issue with users being able to execute user defined functions, even if they lacked privileges on the schema under which a
UDFis defined. NowDQLprivilege on the schema is required.Fixed a regression introduced in Version 6.0.0 that caused statements
SELECT unnest(obj['arr'])['subcol']to fail with aClassCastExceptionifobjcolumn had a type IGNORED andsubcolwas missing in the record. Error was thrown regardless of the value specified in error_on_unknown_object_key. Now it returnsNULLif error_on_unknown_object_key is set tofalseand throwsColumnUnknownExceptionif it has default valuetrue.Improved error message thrown when providing empty value for configuration settings, e.g.:
$> bin/crate -Cauth.host_based.enabled $> bin/crate -Cauth.host_based.enabled=
Fixed an issue that caused incorrect results when using an
Anti-Join(WHERE NOT EXISTS) with aWHEREclause containingBOOLEANtyped columns combined by anORoperator. Example:SELECT * FROM t1 WHERE NOT EXISTS (SELECT 1 FROM (SELECT c2 FROM t1 WHERE bool_col) AS sub0 WHERE t1.bool_col OR t1.bool_col);
Fixed a regression introduced in Version 6.0.0 with upgrade to Lucene 10.2 that caused increase in IOPS and slow recovery times on node restarts. Flag mentioned in Breaking Changes and General is already set to
NORMALstarting from this version and won’t be needed at all starting from CrateDB 6.2.0.Fixed a regression introduced in Version 6.0.0 that caused nested path accesses on
ARRAY(OBJECT)columns returned by a sub-select using aUNNESTfunction to either fail with aColumnUnknownExceptionor return incorrect results as wrong child-columns are used. Example:SELECT obj_arr['child_obj']['id'] AS id FROM ( SELECT unnest( [ {child_obj = { id = 'correct_id'}, id='wrong_id'} ] ) AS obj_arr ) AS sub1 --> now returns 'correct_id' instead of returning 'wrong_id'
Fixed an issue that caused inserts to fail with a
UnsupportedFeatureExceptionerror if a sub-column of aOBJECTtyped column, previously created with aNULLvalue, is then inserted using a non-NULL value and such using a concrete data type.