Release Notes
Release Notes
Current Release
v2025-05-14
14 May 2025- New Feature: Add support for the client_min_messages setting. It controls the minimum severity a message must have to be sent to a connecting client.
- New Feature: Streamlined command line args: --createdb will now open existing database files.
- New Feature: CedarDB now supports function calls in the FROM clause: select * from sqrt(4);.
- New Feature: SQL statements with syntax errors are now also added to the history in interactive mode. You can now browse to them and edit them from within the shell. Previously, only statements that have been executed successfully were added.
- New Feature: CedarDB now supports prepared statements using the construct first X rows only offset Y which is used e.g. by Hibernate for pagination.
- PostgreSQL compatibility: Stubbed the Postgres system tables pg_stats_ext and pg_stats_ext_exprs.
- PostgreSQL compatibility: Added the Postgres function pg_type_is_visible().
- PostgreSQL compatibility: Stubbed the Postgres functions row_security_active(), pg_mcv_list_items(), pg_ident_file_mappings(), pg_stat_get_numscans() and has_foreign_data_wrapper_privilege().
- PostgreSQL compatibility: Added all Postgres builtin UDFs that Postgres's information_schema relies on.
- PostgreSQL compatibility: Report the correct default collate of en_US.UTF-8 in the pg_database system table.
- PostgreSQL compatibility: Stubbed the default_table_access_method setting which is required by pg_dump but irrelevant for CedarDB.
- PostgreSQL compatibility: Use Postgres-compatible oids in the pg_database system table.
- PostgreSQL compatibility: pg_relation_size() and pg_index_size() now also support sequences.
- Performance: Reduced memory consumption of queries with aggregations.
- Maintenance: CedarDB now creates statistics for system tables. This significantly speed up some tools that joined a lot of system tables as CedarDB now generates better query plans.
- Maintenance: Fixed a rare bug where queries with IN expressions crashed.
- Maintenance: Fixed a bug in the docker image where CedarDB was stuck in an endless loop updating the database schema if it crashed before.
- Maintenance: Fixed a rare bug where deleted tuples could reappear under some circumstances.
- Maintenance: Fixed a bug where the optimizer crashed on queries with a provable empty result set under some circumstances.
- Maintenance: Fixed a bug where tables could become owner-less when the owner's password was changed.
- Maintenance: Fixed a bug where CedarDB could have failed gracefully but didn't and instead terminated if the system ran out of memory.
Older Versions
alpha/2025-04-23
23 Apr 2025- New Feature: Added support for COPY FROM <...> WITH ENCODING 'UTF8/UNICODE/SQLASCII'.
- New Feature: Add support for most information_schema tables, as defined by the SQL standard. You can see the implementation progress here.
- New Feature: Interactive mode no longer prints timing numbers per default. If you want to re-enable it, you can do so via "\timing on" in interactive mode.
- New Feature: Looking up values in arrays via ALL/ANY now works: select 'a' = ANY('{a, b}').
- New Feature: Add support for expanding row expressions with .*. The following now works: select (tablefun()).*
- PostgreSQL compatibility: Implemented the postgres functions has_database_privilege(), pg_get_publication_tables(), pg_get_ruledef() and has_server_privilege().
- PostgreSQL compatibility: Casting the regproc,regprocedure and regnamespace types to text now returns the procedure resp. namespace name instead of just an internal identifier.
- PostgreSQL compatibility: Columns of system tables now always have the correct oid type, instead of being just an integer. This is required by a few clients who depend on the right behavior when casting attributes from system tables to text.
- Maintenance: Casting oids of sequences to strings no longer triggers an assert.
alpha/2025-04-10b
10 Apr 2025- New Feature: Support for natively running CedarDB without Docker: curl https://get.cedardb.com | bash will install CedarDB on your system. You can then run ./cedardb to start the server.
- New Feature: Streamlined docker build process. No need to re-download the Dockerfile after a new release. Re-running docker build will always create an up-to-date image.
- New Feature: Experimental ARM support! Both the native binary and docker image now natively run on ARM64 systems.
- New Feature: CedarDB can now bulk create indexes larger than main memory by spooling intermediate data to disk.
- PostgreSQL compatibility: CedarDB now supports schema-qualified column names: select schema.table.column from schema.table.
- PostgreSQL compatibility: Implemented the postgres-internal functions pg_get_function_arguments(), pg_get_function_identity_arguments(), pg_get_function_result(), pg_get_function_sqlbody(), pg_prepared_statement(), pg_timezone_abbrevs(), pg_timezone_names().
- PostgreSQL compatibility: Implemented the pg_language system table.
- PostgreSQL compatibility: Improved output of the pg_proc system table.
- PostgreSQL compatibility: Stubbed a slew of postgres-internal system functions: pg_available_extensions(), pg_available_extension_versions(), pg_config(), pg_cursor(), pg_get_backend_memory_contexts(), pg_get_replication_slots(), pg_get_shmem_allocations(), pg_hba_file_rules() ,pg_prepared_xact(), pg_show_all_file_settings(), pg_show_all_settings(), pg_show_replication_origin_status(), pg_is_wal_replay_paused(), pg_stat_get_activity()
- Maintenance: Fixed a crash in regex_split.
- Maintenance: Fixed a crash in array comparisons.
- Maintenance: Fixed a bug where CedarDB's loading serialized query plans could lead to a crash.
- Maintenance: Fixed a bug where CedarDB wasn't able to unnest highly correlated expressions.
- Maintenance: Fixed a bug where we didn't correctly store precision/scale of array types across database restarts in some cases.
- Maintenance: Fixed a rare crash where we double-freed a string that represented a null value.
- Maintenance: cedardb --version now reports a more human-readable version identifier instead of just a git commit id.
alpha/2025-03-26
26 Mar 2025- New Feature: Print dynamic filters in explain verbose.
- Maintenance: Fixed a bug where old databases that contained deleted indexes could not be loaded in the newest version of CedarDB.
- Maintenance: Fixed parsing ISO8601 intervals with more than 24 trailing zeroes.
alpha/2025-03-25
25 Mar 2025- New Feature: Added support for DROP ROLE.
- New Feature: Added support for DROP GROUP.
- New Feature: Added support for DROP SCHEMA as long as the schema is empty.
- New Feature: Added support for DROP SEQUENCE.
- New Feature: Added support for pg_get_constraintdef(). As a consequence of this, '\d' in psql now shows foreign keys.
- PostgreSQL compatibility: pg_table_size() now works with system tables.
- PostgreSQL compatibility: COPY now works with system tables: copy pg_class to stdout;
- PostgreSQL compatibility: Added support for DROP INDEX CONCURRENTLY which is a no-op since CedarDB always drops indexes concurrently, but is required by some tools.
- PostgreSQL compatibility: Added stubbed pg_get_triggerdef() function. This is required by some tools like pg_dump.
- PostgreSQL compatibility: Stubbed pg_partition_ancestor() system function. CedarDB partitions transparently, so this always returns an empty table.
- PostgreSQL compatibility: Added support for with ordinality in pg_partition_ancestor() system function.
- PostgreSQL compatibility: Added support for with ordinality in array_unnest() function.
- PostgreSQL compatibility: Server now correctly reports compatibility with PostgreSQL 16.1 instead of 11.3 under all circumstances.
- PostgreSQL compatibility: Get rid of the custom namespace cedar which caused issues with some tools.
- PostgreSQL compatibility: Allow casts from oids inside strings.
- PostgreSQL compatibility: CedarDB no longer prints implicitly created foreign key indexes in pg_class and pg_index.
- PostgreSQL compatibility: Print the full name when calling pg_get_indexdef() on a table that is not in the search path.
- PostgreSQL compatibility: pg_table_is_visible now works on indexes and sequences.
- PostgreSQL compatibility: Use Postgres's special legacy oidvector and int2vector types in pg_index.
- PostgreSQL compatibility: CedarDB now correctly enforces unique names across tables, views, indexes, and sequences.
If you previously two of those objects with the same name, they have been renamed! . So if you had a table and a sequence both called foo, the sequence is now called foo1. - PostgreSQL compatibility: SELECT * FROM
now works and returns the same table output as PostgreSQL. - PostgreSQL compatibility: Sequence limits now behave identical to Postgres.
- PostgreSQL compatibility: Implement pg_opclass system table.
- Performance: Streamlined counting characters with SSE.
- Performance: Added support for AES hardware accelerated hashing via gxhash.
- Performance: Expressions of the type regex_replace(in, pattern, '\1') are no optimized to regexp_substr().
- Performance: Leading and trailing wildcards in regexp_substr() are now dropped.
- Performance: CedarDB now accepts comments which contain invalid UTF-8.
- Maintenance: Updated ICU version to 76.1, introducing support for new unicode characters.
- Maintenance: Fixed off-by-one error in regexp_substr().
- Maintenance: Ensure sequences now have an explicit start value.
- Maintenance: Severely hardened UTF-8 validation.
- Maintenance: Fixed on OOB access when parsing ISO8601 intervals which lead to a crash.
- Maintenance: Fixed a bug where generate_series() didn't correctly work when used in conjunction with arrays that weren't 1-indexed.
- Maintenance: Fixed a bug where the undocumented Postgres function _pg_expandarray didn't correctly work on array that weren't 1-indexed.
- Maintenance: Fixed a bug where nulls weren't correctly ordered when using radix sort.
- Maintenance: Fixed a bug in regexp_match() and regexp_split_to_array() where they caused an error when used on values originating in a table.
- Maintenance: Fixed a bug where function lookups without an explicit namespace didn't find the function.
- Maintenance: Fixed quantified expressions over string arrays: insert into testtext values (array['test',null,'averylongstring']), (array['test']); select 'x' = ANY(x) from testtext; now works.
- Maintenance: Fixed an error when casting from or to TEXT[] arrays.
- Various bug fixes, stability, and performance improvements.
alpha/2025-02-20
20 Feb 2025- PostgreSQL compatibility: We made various compatibility time zone and interval changes such that we can pass the JDBC time tests.
- PostgreSQL compatibility: We now allow $ symbols in identifiers.
- PostgreSQL compatibility: You can now write nested comments in your SQL queries.
- PostgreSQL compatibility: Simplified index size checking by parsing names as regclass oids in pg_table_size('foo_pkey').
- PostgreSQL compatibility: PostgreSQL's parse messages are often sent without typemod. We now use the generic type as default.
- PostgreSQL compatibility: We now print arrays and calculate the array_length according to PostgreSQL. Our array printer used to differ for arrays that have special characters, are empty, or have null values.
- PostgreSQL compatibility: We now allow changing several transaction behavior settings with SET TRANSACTION statements and changing the default session behavior with SET SESSION CHARACTERISTICS AS TRANSACTION statements.
- PostgreSQL compatibility: OIDs of system tables are now identical to the ones PostgreSQL uses.
- Performance: If the join build side is empty, we skip evaluating the probe side completely when this is safe to do.
- Performance: We revised operations that use the sequentially consistent memory model, replacing sequentially consistent stores and loads (where possible) with more performant acquire/release operations.
- Maintenance: Fixed a rare race condition where the current file descriptor was closed and data was read. This could cause incorrect results to be returned. Because the likelihood of this increased in constrained memory settings, we now use more rigorous integration tests that put more stress on the memory subsystem.
- Maintenance: Fixed a bug when we transformed an asof join conditions to a regular join condition.
- Maintenance: We fixed a rare race condition in our group commit that could cause queries to be live-locked until the next transaction commits.
- Maintenance: When processing insert on conflict, we only returned the updated rows instead of all rows.
- Maintenance: Fixed a bug where we used a cached functional dependency after unnesting the query which could trigger an assert.
- Various bug fixes, stability, and performance improvements.
alpha/2025-02-04
4 Feb 2025- New Feature: CedarDB's explain output includes more details:
- explain now shows internally generated CTEs.
- explain analyze now shows the memory usage of hash joins and group by aggregations.
- explain analyze now reports the I/O statistics of table scans.
- New Feature: You can now directly query csv files located on the server via select * from '/path/to/filename.csv'.
- New Feature: Introduced the debug.log_slow_queries setting. It will log all queries which took longer than x milliseconds to execute on the server- and on the client side. Activate via set debug.log_slow_queries = min_time_in_milliseconds. Warning: This is a global setting!
- PostgreSQL compatibility: Add pg_prepared_statements system table.
- PostgreSQL compatibility: Correctly consider the weight parameter when deserializing numerics received in binary format.
- PostgreSQL compatibility: pg_index now correctly reports index orders (ascending or descending).
- PostgreSQL compatibility: The row description message of the wire protocol now correctly reports the base table columns of query results. This is required by e.g. JDBC to update ResultSets of a Query.
- PostgreSQL compatibility: Text output of timestamps now correctly truncates trailing zeroes in the microsecond field.
- PostgreSQL compatibility: pg_type now correctly reports the name of array types.
- PostgreSQL compatibility: Return a more readable error message when a varchar exceeds its max length.
- PostgreSQL compatibility: Startup messages may now contain integral timezone offsets instead of just a name.
- PostgreSQL compatibility: CedarDB will now correctly send a ParameterStatus message to the client if a setting has been updated.
- PostgreSQL compatibility: Extend the parsing logic of date style settings.
- Performance: CedarDB now uses O_DIRECT on all systems that support it.
- Performance: Improved selection of unique indexes. CedarDB previously only considered indexes with an explicit constraint as unique. Now, we also consider if the index attributes include a key, which allows choosing better index scans.
- Performance: CedarDB now prefers covering and smaller indexes for index joins instead of always preferring primary keys.
- Performance: CedarDB will now prefer using a covering index for index scans where possible. The previous index selection strategy caused us to sometimes access the underlying table even if a covering index was available that guaranteed no table lookup would be required.
- Performance: Prefer using a table scan over an index scan if we have a very selective restriction on a table that is not covered by the index.
- Maintenance: Fix an issue where CedarDB created overly many memory mappings. This resulted in unnecessary out of memory errors on strict Linux configurations. This only became an issue when creating more than 10'000 tables.
- Maintenance: Fix a bug where we didn't parse drop operator correctly.
- Maintenance: Output offset in the seconds range on timestamp with timezones. This broke timestamps in timezones who had adjustements in the past which were not evenly divisble by minutes. One example is Casablanca, where the timezone was adjusted by 20 seconds in 1913.
- Maintenance: Fix a bug where we didn't consider some tuples in union all in rare edge cases.
- Maintenance: Fix some edge cases for array input from strings where the parser, e.g., didn't consider tab-stops as white-space.
alpha/2025-01-23
23 Jan 2025- New Feature: CedarDB now asynchronously loads data from disk into its page cache. This makes queries that touch data that is not currently cached up to 4x faster!
- New Feature: Output of explain is now flatter, allowing you to more easily read query plans of complex queries. For a full overview and instructions on how to get back the old behavior, please refer to our docs.
- New Feature: You can now cast integers to bitstrings: select 29::bit(4).
- New Feature: Support for read-only transactions via set transaction_read_only.
- New Feature: explain analyze now returns more detailed information about execution times.
- New Feature: Add support for a tinyint type.
- PostgreSQL compatibility: System tables and views are now shown in pg_class.
- PostgreSQL compatibility: Allow parsing values of type time from strings that also specify a date.
- PostgreSQL compatibility: Correct handling of namespaces and owners in system tables.
- PostgreSQL compatibility: pg_table_is_visible() now correctly observes search_path.
- PostgreSQL compatibility: Enforce precision of numerics when casting them from strings or integral types.
- PostgreSQL compatibility: Ensure that no table with oid 0 is printend in system tables since 0 signals an invalid oid. Required by some clients.
- PostgreSQL compatibility: Support binary output of the ByteArray, JSON, and Time datatypes.
- PostgreSQL compatibility: Looking up functions now works with fully qualified names as well: select 'pg_catalog.sum(int)'::regproc;
- PostgreSQL compatibility: Allow using relation names in function calls without explicit casting to regclass: pg_table_size('foo');
- PostgreSQL compatibility: Add array_in dummy function in pg_proc and pg_types. Required by some JDBC queries inferring whether a given type is an array type.
- PostgreSQL compatibility: Support SQL standard compliant way to set the time zone.
- Performance: Improve index selecion for index scans.
- Performance: Skip over subtrees guaranteed to generate no results during execution.
- Maintenance: Work around a bug in LLVM calling conventions. See the corresponding issue in the LLVM repo.
- Maintenance: Print nicer error message when exceeding the maximum precision of a numeric.
- Maintenance: Fix a bug with null handling in generate_subscripts().
- Maintenance: Fix a bug with null handling in upserts.
- Maintenance: Fix a bug where we wrongly optimized multi-column conditions to IN expressions.
- Maintenance: Got rid of pesky irrelevant message about perf counters not being able to be initialized.
- Maintenance: Fixed a bug where the state of sequences was not correctly recovered after a system crash.
alpha/2025-01-03
3 Jan 2025- Performance: Vectorize printing of UUIDs. This drastically speeds up performance for queries returning a lot of UUIDs.
- Performance: Refined optimizer logic on when to employ an index scan when buffer size is limited to further reduce buffer thrashing.
- Maintenance: Columns can now be called 'step' again.
- Maintenance: Fixed a bug where index scans in combination with a limit without order by clause did not produce all matching tuples.
- Maintenance: Fixed a bug where index range scans in combination with a limit did not produce all matching tuples.
- Maintenance: Fixed a bug where inserting null values reported a unique constraint violation if the index enforcing uniqueness was created after rows had already been inserted.
- Maintenance: Fixed several bugs in unnesting of asof joins.
- Maintenance: Fixed a crash when calling pg_get_view_def on views with long names.
- Maintenance: Fixed a bug where using non constant limit or offset declarations triggered an assert.
- Maintenance: Fixed a race condition when changing settings concurrently.
- Maintenance: Fixed a bug where queries operating on tables with multiple unique and non-unique indexes would skip some rows.
- Various bug fixes, stability, and performance improvements.
alpha/2024-12-24
24 Dec 2024- New Feature: We have added support for explain statements after different query optimization steps. For example, explain (step Unnesting) select * from foo, bar where foo.a = bar.b shows the query tree after the 'Unnesting' optimization step but before the 'Predicate Pushdown' step. For the syntax and available steps, please refer to our docs.
- Performance: The logic deciding whether to use an index for a join is now more sophisticated. Previously, it could happen that CedarDB suddenly switched to a very disadvantageous query plan once a relation's size reached 10% of the available main memory. CedarDB now also takes the cost of buffer thrashing into account, not only a relation's size.
- Performance: CedarDB is now more careful on when it holds an exclusive lock on the database schema during DDL statements, improving performance of DDL queries.
- PostgreSQL compatibility: Support for non constant values for limit offset: It is now possible to prepare queries like select * from foo limit $1 offset $2. This was e.g. required by Drizzle Studio.
- PostgreSQL compatibility: Add pg_column_is_updatable() builtin function.
- Maintenance: Fix a bug in the null-handling logic of IN expressions which triggered a faulty assert. Also occured in instances where no explicit IN expression was present but CedarDB optimized a different expression into such an expression.
- Maintenance: Tables created in the temporary pg_temp namespace can now actually be referenced in queries and aren't lost to the aether.
- Maintenance: Fix a race condition in the group commit queue where a thread waiting for a sync to disk was notified before it started to wait. This could lead to deadlocks of bulk transactions
- Various bug fixes, stability, and performance improvements.
alpha/2024-12-16
16 Dec 2024- New Feature: Add support for the serial, smallserial, and bigserial data types.
- New Feature: Add trigonometric functions with degrees: acosd, asind, atand, cosd, cotd, sind, tand.
- New Feature: Add hyperbolic trigonometric functions: sinh, cosh, tanh, asinh, acosh, atanh.
- New Feature: Add support for generate_subscripts().
- New Feature: Very basic support for the Drizzle ORM.
- Performance: Doing inserts in batches of 128 or more elements is now considerably faster.
- Performance: coalesce expressions with large number of arguments are now optimized in linear instead of quadratic time.
- PostgreSQL compatibility: support parsing oids from namespace literals: select 'pg_temp'::regnamespace .
- PostgreSQL compatibility: calling json_array_elements() on null now returns an empty string.
- PostgreSQL compatibility: malformed protocol messages now return the ProtocolViolation error code instead of InternalError.
- PostgreSQL compatibility: Failing to authenticate now returns the correct error codes.
- PostgreSQL compatibility: It is now possible to bind up to 65535 parameters to a prepared statement, instead of the previous maximum of 32767.
- PostgreSQL compatibility: The pg_columnkeys column in the pg_constraint and pg_index system tables are now 1-indexed instead of 0-indexed.
- PostgreSQL compatibility: Add has_sequence_privilege() builtin function.
- PostgreSQL compatibility: Add pg_sequence_last_value() builtin function.
- PostgreSQL compatibility: Update the pg_sequence system view to return meaningful data.
- PostgreSQL compatibility: List sequences in the pg_class system table.
- PostgreSQL compatibility: Add stubbed pg_get_serial_sequence() builtin function.
- PostgreSQL compatibility: Add stubbed pg_stat_user_indexes system table.
- PostgreSQL compatibility: Add stubbed pg_stat_all_indexes system table.
- Maintenance: Fix an exception when parsing SET statements.
- Maintenance: Malformed client messages are now handed gracefully and close the connection instead of triggering an assertion failure.
- Maintenance: Automatically abort queries that run into a live lock. This could happen when trying to evict buffer pages while all buffer pages where pinned.
- Maintenance: Parsing alter role statements setting the connection limit to values lower than -1 now throws the expected error instead of triggering an assert.
- Various bug fixes, stability, and performance improvements.
alpha/2024-12-05
5 Dec 2024- New Feature: The docker image is now compatible with external pg_isready health checks. Previously, CedarDB would be started and stopped multiple times during setup while being externally reachable. This caused pg_isready to prematurely declare CedarDB being up and subsequent connections to fail.
- New Feature: Log messages are now prefixed with a timestamp.
- New Feature: More detailed CSV import error messages: When the format is wrong, CedarDB now returns the offending column and the detailed issue.
- PostgreSQL compatibility: Sequence names now automatically convert to oids. You can now write CREATE SEQUENCE serial; select nextval('serial');
- PostgreSQL compatibility: Support for factorial(n), in addition to the already existing n! and !!n.
- PostgreSQL compatibility: Subtracting two dates now returns an integer with the difference in days, instead of an interval.
- PostgreSQL compatibility: split_part now allows for negative arguments to search backward from the end and correctly returns null in some corner cases.
- Maintenance: Fixed a bug where docker containers would not start correctly on Windows.
- Maintenance: Removed a few spurious asserts which gave the impression something went wrong when everything was in fact fine.
- Maintenance: Fixed a crash for queries which would join at least two tables using the json_array_elements set generating function.
- Maintenance: Fixed a rare deadlock when creating indexes. This could happen when re-creating an index after dropping it.
- Maintenance: Fixed an issue where dropped indexes were wrongly restored when a concurrent transaction also modifying it was aborted.
- Maintenance: Fixed a case where CedarDB tried to truncate a log too early and subsequently failed an assert.
- Various bug fixes, stability, and performance improvements.
alpha/2024-11-21
21 Nov 2024- New Feature: Add support for psql builtin describe commands \d table and \d+ table.
- PostgreSQL compatibility: Include attribute defaults in the pg_attrdef system table.
- Performance: Reduce transaction tail latency: When the overall write-ahead log size becomes too large, writing transactions are now throttled instead of paused.
- Maintenance: Fix a rare deadlock during concurrent compression of inserts.
- Maintenance: Fix a crash when inserting strings just smaller than 64 KB.
- Various bug fixes, stability, and performance improvements.
alpha/2024-11-15
15 Nov 2024- New Feature: This release comes with a new Docker image that more closely mirrors the behavior of the official Postgres image. You can now pass the superuser name and password as environment variabls at container startup instead of having to create them manually inside Docker! For a full list of changes and new features, check out our new Docker docs.
- New Feature: The Docker image now correctly exports the PG_HOST environment variable. When using psql from inside the Docker container, you no longer need to write -h /tmp.
- Performance: More aggressive autocompression of tables. Previously, CedarDB only compressed tuples during bulk inserts, scan-intensive queries or when the user manually executed VACUUM. CedarDB now also autocompresses tuples after small inserts, which considerably improves table scan performance and significantly reduces storage consumption for write-intensive workloads
- PostgreSQL compatibility: Constructing an array from empty input now returns an empty array instead of null, e.g. select array(select * from unnest(ARRAY[]::text[]));
- PostgreSQL compatibility: Mirror undocumented Postgres behavior regarding function and table aliases: select a from foo a now works.
- Maintenance: Fixed a race condition in the buffer manager where CedarDB could lose updates. This race condition caused the database to shut down and the recovery process to complain about an invalid system state. It was only triggered under heavy memory pressure when a page was incorrectly selected twice for eviction.
- Maintenance: User defined functions are now formatted correctly when printing with explain (analyze, format sql).
- Maintenance: Fixed a rare case where IN expressions with nullable inputs could cause a query to abort.
- Various bug fixes, stability, and performance improvements.
alpha/2024-11-05
5 Nov 2024- New Feature: Improved internal memory allocation: CedarDB now tracks memory consumption during query execution and aborts queries consuming too much working memory.
- New Feature: Add VACUUM statement. It manually triggers data compression of newly inserted data that hasn't been queried often yet.
- Performance: Greatly speed up queries of the pattern SELECT * FROM foo LIMIT 1.
- Performance: Improve estimates on tables with unique constraints.
- Performance: Reduce write-ahead log size. CedarDB now tries to prune the log much more eagerly to reduce disk space consumption.
- PostgreSQL compatibility: Add name datatype to pg_type system table. Required by some ORMs using JDBC (e.g., "Exposed") to infer maximum length of table names and columns.
- PostgreSQL compatibility: Allow parsing dates from strings specifying a full timestamp. Used by some ORMs such as "Exposed" to construct dates.
- Maintenance: Fix case where created functions couldn't be dropped.
- Maintenance: Fix deadlock when client connection unexpectedly drops.
- Maintenance: Upgraded to LLVM 19.
- Various bug fixes, stability, and performance improvements.
alpha/2024-10-17
17 Oct 2024- Maintenance: Stability fix for replanning prepared statements with UPSERTs.
alpha/2024-10-16
16 Oct 2024- Maintenance: Check for newer CedarDB versions on Docker startup.
- Maintenance: Fix rare cases of lost tuples in UPSERT queries.
- Maintenance: Use consistent sort order for BLOB types.
- Performance: Lazily compile prepared statements.
- PostgreSQL compatibility: Use PostgreSQL-compliant BigNumeric type truncation.
- PostgreSQL compatibility: Support regclass casts for system tables.
- Various bug fixes, stability, and performance improvements.
alpha/2024-10-11
11 Oct 2024- New Feature: Added support for AsOf joins.
- New Feature: Added support for upserts through ON CONFLICT DO UPDATE and ON CONFLICT DO NOTHING.
- New Feature: Added support for additional aggregation functions.
- Maintenance: Update the timezone database to version 2024b.
- Maintenance: Fix daylight savings time handling for regions with daylight savings differences other than 1 hour.
- Performance: Improve join unnesting for dependent joins.
- Performance: Various cardinality estimation improvements.
- Performance: Add vectorization support for pg_vector-type cosine distance calcultions.
- Performance: Lazily compile user-defined functions.
- PostgreSQL compatibility: Support array-constructing subqueries: select array(values(1),(1)); returns {1,1}.
- PostgreSQL compatibility: Added has_column_privilege() function.
- PostgreSQL compatibility: Added has_function_privilege() function.
- PostgreSQL compatibility: Improve output of pg_attribute system table.
- PostgreSQL compatibility: Improve output of pg_type system table.
- PostgreSQL compatibility: Full support for pg_timezone_names system table.
- PostgreSQL compatibility: Full support for pg_timezone_abbrevs system table.
- PostgreSQL compatibility: Added support for default keyword in INSERT statements.
- PostgreSQL compatibility: Use PostgreSQL-compliant sort order for bytea type.
- PostgreSQL compatibility: Fix output of current_schema() function.
- Various bug fixes, stability, and performance improvements.
alpha/2024-09-13
13 Sep 2024⚠️
This release is incompatible with previous CedarDB database formats!
Please refer to the database upgrade guide for more information.
Please refer to the database upgrade guide for more information.
- New Feature: Implemented the functionality of the pgvector extension. For a feature description take a look at the vector datatype reference, the pgvector extension compatibility docs, or follow our new vector tutorial.
- New Feature: Restructured database file storage: All files of a given database are stored in the same directory to declutter your server. Existing database files will be converted to the new format automatically on startup, no manual intervention required.
- New Feature: Added support for quantified expressions over subqueries and arrays:
with tmp(x) as (select array[1,2,3]) select 1 = ANY(x) from tmp. - New Feature: Implicitly cast string constants in binary expressions: You can now, for example, write 123 + '456'.
- New Feature: Better type deduction for unknown types: Parameters now seamlessly work in function calls. For example lower($1) now treats the parameter as a string.
- New Feature: Added support for row results in subqueries and non constant arrays:
select (r.r)."2", (r.r)."1", (r.r)."0" from (select row('foo','bar','baz')) r(r)" returns baz bar foo . - Maintenance: Introduce recovery log versioning to reduce the likelihood of having to break backwards compatibility in the future.
- Performance: Optimizer: Improved cardinality estimation for very selective predicates. This sometimes improves execution plans, where we observed cases of 10x speedup
- Performance: Implemented a heuristic that inlines CTEs that materialize a large state but are cheap to recalculate. This improves TPC-DS Q95's performance by about 10x, for example.
- Performance: More aggressively use band joins where beneficial, even if the query does not contain between conditions.
- Performance: Optimize concat calls with single arguments: concat(x) becomes cast(x as text).
- PostgreSQL compatibility: Honor Postgres AS NOT MATERIALIZED hint in CTEs.
- PostgreSQL compatibility: Timestamp calculations are now done in UTC instead of local time in accordance with the Postgres docs.
- PostgreSQL compatibility: When adding intervals to timestamps, the months, days, and microseconds fields of the interval value are handled in turn.
- PostgreSQL compatibility: Correctly output regclass and regtype names: For example, pg_typeof(42) now returns 'int4' instead of a cryptic identifier.
- PostgreSQL compatibility: trim() now allows for Postgres' alternative syntax: Instead of trim('x' from 'xfoox') you can now also write trim('xfoox','x').
- PostgreSQL compatibility: Added to_regtype() function.
- PostgreSQL compatibility: Added pg_typeof() function.
- PostgreSQL compatibility: Added nameconcatoid() function.
- Various bug fixes, stability, and performance improvements.
alpha/2024-07-24
24 Jul 2024⚠️
This release is incompatible with previous CedarDB database formats!
Please refer to the database upgrade guide for more information.
Please refer to the database upgrade guide for more information.
- Maintenance: Split data file and schema version numbering to reduce the likelihood of having to break backwards compatibility in the future
- PostgreSQL compatibility: Full support for all PostgreSQL timezone abbreviations
- PostgreSQL compatibility: Parse (not-) materialized Common Table Expression hints
- PostgreSQL compatibility: Added for pg_proc system table
- PostgreSQL compatibility: Added pg_function_is_visible() function
- Various bug fixes and stability improvements
alpha/2024-07-12
12 Jul 2024- New Feature: Support for SQL UDF table functions in SELECT statements
- New Feature: Allow creating and releasing SAVEPOINTs within transactions
- New Feature: Support quantified expressions over constant arrays
- New Feature: Support 'ON CONFLICT DO NOTHING' for upserts
- PostgreSQL compatibility: Support for parsing 'COPY FREEZE' performance hint
- PostgreSQL compatibility: Support for compound date styles
- PostgreSQL compatibility: The pg_class system table now also shows views
- PostgreSQL compatibility: The pg_constraint system table now also shows indexes
- PostgreSQL compatibility: Added pg_relation_is_updateable() function
- PostgreSQL compatibility: Added pg_my_temp_schema()
- PostgreSQL compatibility: Added pg_description system table
- PostgreSQL compatibility: Added has_schema_privileges() function
- PostgreSQL compatibility: Added has_any_column_privilege() function
- PostgreSQL compatibility: Added pg_get_keywords() function
- Performance: 300x performance improvement for calculating table sizes via pg_total_relation_size()
- Various bug fixes and stability improvements