Version 2.1.1

Released on 2017/08/04.


If you are upgrading a cluster, you must be running CrateDB Version 1.1.3 or higher before you upgrade to 2.1.1.

If you want to perform a rolling upgrade, your current CrateDB version number must be Version 2.1.0. If you want to upgrade from a version prior to this, the upgrade will introduce all of the breaking changes listed for Version 2.1.0, and will require a full restart upgrade.

Consult the upgrade notes for Version 2.1.0 when upgrading.


Before upgrading, you should back up your data.

Table of contents



  • Made the help messages of bin/crate and the Java code consistent. This change also removes the undocumented -E command line option which makes -C the only valid option for passing settings to CrateDB.

  • Changed the Enterprise License missing check message, as well as lowering the severity from HIGH to LOW.

  • Added a warning message to the log if the unofficial Elasticsearch HTTP REST API is enabled via es.api.enabled setting.

  • Updated Elasticsearch to v5.4.3.

  • Enabled mapping.total_fields.limit setting for tables in order to be able to increase maximum number of columns higher than the default of 1000.

  • Table functions now support value expressions as arguments.


  • Fixed an issue when using dots in an identifier for column creation in alter table, where they were interpreted as sub-fields of an object. The usage of dots as part of a column name is prohibited.

  • Fixed an issue that prevented CrateDB from starting when path.home was set via command line argument.

  • Fixed an issue causing JOINs on virtual tables (subselects) which contain LIMIT and/or OFFSET to return incorrect results. E.g.:

      (SELECT * FROM t1 ORDER BY a LIMIT 5) t1,
      (SELECT * FROM t2 ORDER BY b OFFSET 2) t2
    ON t1.a = t2.max
  • Fixed an issue causing JOINs with aggregations on virtual tables (subselects) which also contain aggregations to return incorrect results. E.g.:

    SELECT t1.a, COUNT(*) FROM t1
    JOIN (SELECT b, max(i) as max FROM t2 GROUP BY b) t2
    ON t1.a = t2.max
  • Fixed the error message to be more descriptive when the condition in a CASE/WHEN expression is not a boolean.

  • Fixed an issue which caused an exception if EXPLAIN is used on a statement that uses the ANY (array_expression) operators.

  • Allow support of conditional expression with different return types that can be converted to a single return type.

  • Fixed support for negate on null in conditional expression.

  • Fixed support for setting write.wait_for_active_shards on a partitioned table.

  • Added missing documentation about the default value of the table setting write.wait_for_active_shards.

  • Improved user privileges matching to constant time complexity.

  • Improved the error message if an invalid table column reference is used in INSERT statements.

  • Optimized the algorithm that determines the best ordering of the tables in a JOIN.

  • Updated Crash to 0.21.4 which fixes an issue with \verbose command not working correctly when Crash is started without --verbose.

  • Implemented flexible return type of sum function depending on the input types, which was previously only double.

  • Fixed a regression causing incorrect results for queries with DISTINCT on scalar functions. E.g.:

    SELECT DISTINCT upper(name) FROM t
  • Fixed a race condition which made it possible to create new columns in a partition of a partitioned table that didn’t match the type of the same column of sibling partitions.

  • Upgraded Admin UI version to fix an issue with the Twitter tutorial.

  • Fixed a NPE when running select port from sys.nodes and psql.enabled: false was set.

  • Fixed an issue where the user that gets provided by the client on connect is not always used as current user if host based authentication is disabled.

  • Corrected the documentation of the version column of the sys.snapshots table. It was described as the CrateDB version whereas it’s an internal version instead.

  • Dropping an empty partitioned table now drops the related table privileges.

  • Implemented NOT NULL constraint validation for nested object columns, which was previously ignored. E.g.:

    CREATE TABLE test (
      stuff object(dynamic) AS (
        level1 object(dynamic) AS (
          level2 string not null
        ) NOT NULL
      ) NOT NULL
  • Internal system queries are now executed under the crate superuser if user management is enabled.

  • != ANY() could not operate on arrays with more than 1024 elements. This limit has been increased by default to 8192. A new node setting: indices.query.bool.max_clause_count has been exposed to allow configuration of this limit.

  • Fixed an issue which caused unrelated table privileges to be lost after a table was renamed.

  • Fixed an issue that prevents CrateDB from bootstrapping on Windows hosts.