Unreleased Changes


These changes have not yet been released.

If you are viewing this document on the Crate.io website, these changes reflect what exists on the master branch in Git. This is where we collect changes before they are ready for release.


Unreleased changes may not be ready for general use and could lead to data corruption or data loss. You should back up your data before experimenting with unreleased changes.

Table of contents

Breaking Changes

  • Remap CrateDB object array data type from the PostgreSQL JSON to JSON array type. That might effect some drivers that use the PostgreSQL wire protocol to insert data into tables with object array typed columns. For instance, when using the Npgsql driver, it is not longer possible to insert an array of objects into a column of the object array data type by using the parameter of a SQL statement that has the JSON data type and an array of CLR as its value. Instead, use a string array with JSON strings that represent the objects. See the Npgsql documentation for more details.
  • Bulk INSERT INTO ... VALUES (...) statements do not throw an exception any longer when one of the bulk operations fails. The result of the execution is only available via the results array represented by a row count for each bulk operation.


  • Include the bundled version of OpenJDK (13.0.2+8) into the CrateDB built. It means that CrateDB doesn’t rely the JAVA_HOME of the host system any longer.
    • Removed a node check that checks the JVM version under which CrateDB is running.
  • Added the pg_catalog.pg_proc table.
  • Added length and repeat scalar functions.
  • Added the server_version_num and server_version read-only session settings.
  • Added the array_agg aggregation function.
  • Added entries for primary keys to pg_class and pg_index table.
  • Added support for GROUP BY operations on analysed columns of type text.
  • Added the trunc scalar function.
  • Added the now scalar function.
  • Introduced new optional RETURNING clause for Insert to return specified values from each row inserted.
  • Added a mod alias for the modulus function for improved PostgreSQL compatibility.
  • Added the atan2 trigonometric scalar function.
  • Added the exp scalar function.
  • Added the degrees and radians scalar functions.
  • Added support for using table functions with more than one column within the select list part of a SELECT statement.
  • Added pg_type columns: typbyval, typcategory, typowner, typisdefined, typrelid, typndims, typcollation, typinput, typoutput, and typndefault for improved PostgreSQL compatibility.
  • Replaced the Nashorn JavaScript engine with GraalVM for JavaScript user-defined functions. This change upgrades ECMAScript support from 5.1 to 10.0.
  • Added support for JOIN USING, e.g. SELECT * FROM t1 JOIN t2 USING (col), an alternative to JOIN ON, when the column name(s) are the same in both relations.
  • Added the cot trigonometric scalar function.
  • Added support for record subscript syntax as alternative to the existing object subscript syntax.
  • Added the pi scalar function.
  • Added a ceiling alias for the ceil function for improved PostgreSQL compatibility.
  • Added the encode(bytea, format) and decode(text, format) string functions.
  • Added the ascii scalar function.
  • Introduced new optional RETURNING clause for Update to return specified values from each row updated.
  • Added the obj_description(integer, text) scalar function for improved PostgreSQL compatibility.
  • Added support for using columns of type long inside subscript expressions (e.g., array_expr[column]).
  • Made generate_series addressable by specifying the pg_catalog schema explicitly. So, for example, both generate_series(1, 2) and pg_catalog.generate_series(1, 2) are valid.
  • Added the version() system information function.
  • Added support for the PostgreSQL notation to refer to array types. For example, it is now possible to use text[] instead of array(test).