The Dec2025 documentation can be found here.
Fixed a number of race conditions.
Improved summing of floating point values in window functions. The result is now as exact as floating point allows. This uses the same algorithm that was already used in the floating sum aggregate.
Added a new tracer component MAL_INSTRUCTION to log MAL instructions during execution.
Fixed calculation of integer averages when the simple summing of values (before the sum is divided by the count) overflows. When it does overflow we continue with a different algorithm, but the switch was done incorrectly. Summation was done in 128 bit integers, so overflow was exceedingly rare.
Fixed a race condition during server exit.
Improvements to the way execution of prepared statements are being reported.
Fix using –logging option of mserver5 to change component levels that are also used by –debug option. For overlapping components, component level change via –logging was being discarded.
It is no longer allowed to run mserver5 or monetdbd as root. There are important security concerns when these servers are run as root.
7729: MonetDB server (Mar2025-SP2-release) crashes at tail_type
7871: Server crash in rel_unnest_dependent
7879: MonetDB crash triggered by LATERAL subquery with window function and complex expressions
7891: Wrong result in UPDATE … FROM with NOT BETWEEN rewrite under OR constant-false timestamp predicate
7892: Logic Bug: Incorrect evaluation of constant boolean expressions leads to wrong COUNT results in subqueries
7893: Logic Bug: Incorrect evaluation of constant boolean expressions with RIGHT JOIN and LATERAL subqueries in MonetDB
7894: Logic Bug: Incorrect evaluation of constant boolean expressions with RIGHT JOIN and subquery functions in MonetDB
7895: Logic Bug: MonetDB miscomputes COUNT with always-false AND NULLIF condition
7896: Logic Bug: MonetDB miscomputes COUNT with complex FALSE AND CASE conditions
7897: MonetDB wrong result in DELETE ... WHERE IN (...) with nested UNION/EXCEPT and UNION ALL vs INTERSECT
7898: Logic Bug: MonetDB produces inconsistent results between COUNT(*) and SUM(EXISTS) with LATERAL subqueries
7899: Logic Bug: MonetDB evaluates EXISTS inconsistently between WHERE and CASE contexts with LATERAL subqueries
7900: Logic Bug: MonetDB miscomputes SUM(CASE WHEN …) vs COUNT(*) with complex CASE, JOIN, and always-false predicates
7901: MonetDB miscomputes SUM(CASE WHEN …) vs COUNT(*) with constant-false AND/OR conditions
7902: Logic Bug: MonetDB miscomputes SUM(CASE WHEN …) vs COUNT(*) with constant ASCII comparison and INNER JOIN
7903: MonetDB NoREC SUM query can not produce any result
7904: Logic Bug: MonetDB produces inconsistent results between COUNT(*) and SUM(CASE WHEN …) for simple predicates
7905: Logic Bug: MonetDB produces inconsistent results between COUNT(*) and SUM(CASE WHEN …) with CASE and COALESCE expressions
7906: MonetDB server crash during SELECT with LATERAL subquery, mixed JOIN types, and Window Functions.
7910: Incorrect optimization of CASE WHEN and always-false predicates leading to wrong results or planner error
7911: MonetDB returns non-resultset response for a SELECT (pymonetdb raises “query didn’t result in a resultset”)
7912: Incorrect result under tautological OR with correlated aggregate subquery (AVG(…) … LIMIT 1)
7913: Incorrect DELETE behavior with EXISTS((… EXCEPT …) UNION ALL …) due to non-resultset response in subquery branch
7914: MonetDB wrong-result: EXISTS over GROUP BY is non-equivalent for UNION ALL vs UNION (DELETE)
7915: Wrong-result in DELETE ... WHERE EXISTS((A) EXCEPT (B)): mutating HAVING ... IS NULL to HAVING 1 = 0 deletes fewer rows (MonetDB)
7916: Incorrect result with LATERAL join and DISTINCT (expected 5, got 25)
7917: Wrong result for correlated COUNT(*) ... IN (...) predicate equivalent to a RANK() filter
7918: Wrong values returned for correlated ORDER BY ... LIMIT/OFFSET form equivalent to ROW_NUMBER() = k
7919: Wrong result for correlated COUNT(DISTINCT ...) form equivalent to a DENSE_RANK() filter
7920: Wrong result for correlated top-1 scalar subquery form equivalent to FIRST_VALUE()
7921: Wrong result for NTILE() predicate rewritten as a correlated floor-ratio formula
7923: Partition-only window aggregate diverges from an equivalent correlated aggregate rewrite
7927: MonetDB server crash during SELECT with nested EXISTS, LATERAL subqueries, and constant-foldable predicates
7932: MonetDB server crash during SELECT with constant-TRUE WHERE and unused subqueries with foldable expressions
7933: MonetDB can not produce any result when we test a SELECT query.
7934: Inconsistent JOIN Semantics under Reordered INNER JOIN
7935: monetdb get all returns get: incomplete response from monetdbd
7936: Using –logging arg of mserver5 to set component levels do not take effect for some components
7937: Primary key constraint affects WHERE NOT col IN (…) behaviour
7938: Wrong result: NOT (col = const AND col IS NOT NULL) returns TRUE for non-matching rows (Dec2025)
7940: mmath / batmmath divide-by-zero throws without SQLSTATE(22012), JDBC clients see 22000
7943: Wrong result when casting decimal to decimal omitting precision and scale
7728: MonetDB server (Mar2025-SP2-release) crashes at strCmp
7770: Assertion failure in query_outer_aggregated with aggregated scalar subquery in INSERT VALUES
7788: mserver crash: rel_order_by raising assertion is_project(rel->op) fail
7789: mserver crash : rel_bin.c exp_bin: Assertion `0’ failed.
7790: mserver5 crash: rel_bin rel2bin_insert Assertion `!n && !m’ failed
7791: mserver5 crash : rel_bin.c Assertion `sql->session->status == -10’ failed.
7792: Mserver crash:rel_bin.c stmt *rel2bin_join: Assertion `sql->session->status == -10’ failed
7793: mserver crash:rel2bin_semijoin Assertion `sql->session->status == -10’ failed.
7794: mserver crash: rel_bin rel2bin_groupby Assertion `sql->session->status == -10'
7795: mserver crash: rel2bin_project Assertion `sql->session->status == -10’ failed.
7796: mserver crash : stmt_alias_ Assertion `label’ failed.
7797: monetdb crash :rel_exp.c rel_find_exp_and_corresponding_rel_ Assertion `e->nid’ failed.
7800: mserver crash: rel_used_projections Assertion `e->nid && exps_bind_nid(exps, e->nid)’ failed
7801: mserver crash:exp_rel_visitor Assertion `e’ failed.
7813: Top N not pushed down to Remote Tables in Merge Table (v11.53.15)
7815: Server SIGSEGV in ALGmarkselect triggered by CAST·WHEN NOT NULL·UNION SELECT DISTINCT feature intersection
7816: table returning function with split_part() and generate_series() crashes server when called multiple times
7818: Server crash in GDKanalytical_covariance_samp triggered by NULL-argument statistical window functions combined with divide-by-zero frame bounds and empty UNION range
7820: MonetDB server crashes with “unexpected end of file” on SELECT with scalar subquery and EXISTS referencing system tables
7826: Monetdb server crash on SELECT with nested derived tables, EXISTS subquery with LIMIT, and complex boolean predicates on system catalog tables
7832: Server crash in rel_push_select_down (SQL optimizer) triggered by row-value comparison warm-up sequence and rank() OVER (PARTITION BY mixed-type literals)
7833: Bug Report — Server crash in rel_push_select_down (SQL optimizer) triggered by RANK() OVER in HAVING NOT x < ANY (aggregate comparison) with multi-column MAX/MIN SELECT
7834: Server crash in rel_push_select_down (SQL optimizer) triggered by doubly-nested recursive CTE inside STDDEV_POP(NULLIF(...)) with CUBE GROUP BY and correlated NOT IN subquery
7835: Server crash in rel_push_select_down (SQL optimizer) triggered by NULLIF(recursive_CTE, NULL) inside HAVING with GROUP BY CUBE and triple-UNION source
7836: MonetDB server crash on SELECT with CASE WHEN containing nested EXISTS, LATERAL subquery with LIMIT, and complex boolean predicates on system catalog tables
7837: MonetDB server crash on SELECT with nested CASE WHEN, correlated EXISTS subqueries, LATERAL join with LIMIT/OFFSET, and complex constant-folded predicates
7838: MonetDB server crash on SELECT with nested joins, EXISTS subquery with scalar aggregates, and OR in ON conditions
7839: TCP health check floods merovingian log with errors
7840: MonetDB server crash during optimization of SELECT with nested LATERAL and multiple scalar aggregate subqueries
7841: Server crash in rel_push_select_down (SQL optimizer) triggered by nested recursive CTE inside STDDEV_POP(NULLIF(...)) with CUBE grouping and BETWEEN on md5(NULL)
7842: Server crash in rel_push_select_down (SQL optimizer) triggered by max() OVER in UNION with GROUP BY CUBE and deeply nested recursive CTE in NOT IN HAVING predicate
7843: Server crash during signal handling (vscanf/psiginfo) triggered by multi-statement sequence with rank() OVER (PARTITION BY mixed-type literals) after simple comparison warm-up
7844: Server crash in _rel_aggr (aggregate relation builder) triggered by SUM(DISTINCT) after multi-statement escape-character comparison sequence and CREATE/DROP TABLE
7845: Server crash in bin_find_smallest_column
7846: Server crash in do_covariance_and_correlation
7847: MonetDB server crash during SELECT with nested EXISTS, CASE expression, and correlated subquery referencing derived table columns
7848: MonetDB server crash during SELECT with LATERAL subquery, nested CASE expressions, and scalar subqueries
7849: MonetDB server crash during SELECT with nested EXISTS, mixed JOIN types, and correlated derived-table subquery
7850: MonetDB server crash during SELECT with LATERAL subquery, mixed JOIN types, and nested CASE expressions
7851: MonetDB server crash during MERGE with deeply nested LATERAL subqueries and correlated EXISTS predicates
7852: Server crash in exp_bin (expression code generation) triggered by row-value comparison warm-up sequence and COUNT(*) OVER (ROWS BETWEEN CASE ... PRECEDING AND CURRENT ROW) with complex NOT IN subquery
7853: Server crash in exp_bin (expression code generation) triggered by 5 IN (subquery) AND 6 IN (subquery) with HAVING containing recursive CTE
7854: Server crash in exp_freevar during rel_unnest_dependent (deep recursion) triggered by doubly-nested recursive CTE with ltrim(rtrim(sql_min(...))) seed and deeply correlated NOT IN subquery with SUM(DISTINCT CAST(NULL IN (...) AS INTEGER))
7855: Server crash in exp_has_freevar
7856: Server crash in exp_match
7857: Server crash in exp_rel_visitor
7859: Server crash in getModule
7862: Server crash in rel_crossproduct
7865: Server crash in rel_get_statistics_
7867: Server crash in rel_optimize_projections_
7870: Server crash in rel_set_type
7872: Server crash in rel_unnest_simplify
7873: MonetDB crash with deeply nested LATERAL and EXISTS queries
7874: MonetDB crash on SELECT with nested LATERAL subqueries, multi-level JOINs, and correlated EXISTS predicates
7875: MonetDB server crash during SELECT with multiple LATERAL subqueries, complex JOIN conditions, and nested CASE expressions
7876: MonetDB server crash during SELECT with RIGHT JOIN, EXISTS subquery, and complex constant-folded expressions
7877: MonetDB crash with nested RIGHT JOINs, correlated EXISTS subqueries, and constant-based join predicates
7878: MonetDB crash with minimal LATERAL subquery and nested CASE in WHERE
7880: MonetDB crash (SIGSEGV) on query with nested LATERAL subqueries and CASE expression, no direct reason reported by mserver5
7882: Incorrect optimization of LATERAL subquery with DISTINCT and outer reference leading to wrong results or planner error
7883: MonetDB crash (SIGSEGV) on query with RIGHT JOIN and Subquery, no direct reason reported by mserver5
7884: MonetDB crash (SIGSEGV) on query with Lateral subquery and a redundant always-true predicate, no direct reason reported by mserver5
7886: LOCAL TEMPORARY VIEW not visible via CTE
7888: MonetDB produces different results for two logically equivalent UPDATE statements. The mutated statement differs from the original only by adding a dead boolean branch inside the predicate: AND 1 = 0
7889: MonetDB produces different results for two DELETE statements whose EXISTS subqueries should be equivalent in this test case.
7890: Wrong result for semantically equivalent INSERT … SELECT … WHERE EXISTS(…) with UNION / EXCEPT / INTERSECT
7690: CASE operator inside aggregate function error
7691: Slow execution of a query with a constantly false WHERE-condition
7726: MonetDB server (Mar2025-SP2-release) crashes at ALGgroupby
7759: PCRE replace referencing non-existing capture groups fails with “Could not allocate space”
7760: Unexpectedly high resource and time usage when using IN (SELECT table_name.column_name FROM table_name GROUP BY 1) subquery
7765: CREATE LOCAL TEMPORARY VIEW leaves orphan dependencies behind
7766: Assertion failure in exp_bin when using scalar subquery with GROUP BY inside aggregate
7767: Assertion failure (sql->session->status == -10) in rel2bin_select caused by malformed IN (SELECT …) expression
7768: Simple single table query returns wrong results
7769: Crash in NTH_VALUE window function with RANGE frame
7771: Assertion failure in stmt_alias_ with scalar subquery in INSERT VALUES
7772: msqldump does not dump UNLOGGED TABLE definitions
7773: msqldump generates invalid SQL CREATE TABLE definitions for tables with multiple CHECK constraints
7775: heap-buffer-overflow in monetdb causing monetdb crash
7780: PLAN performance explosion with CTEs, nested CASE, wide column counts
7782: system view sys.roles does not list implicitly created roles
7783: Duplicate rows returned when selecting on composite primary key after delete/re-insert
7785: Recursive CTE with UNION ALL may cause infinite loop / non-terminating execution
7786: DROP TABLE fails with HY013 “Could not allocate memory” after ALTER TABLE RENAME
7787: mserver crash: SQLrun: Assertion `!*m->errstr’ sql_execute.c
7798: running mserver5 under valgrind does not initialize SQL interface.
7799: server crashes when an error is detected during initialization
7803: sever crash at rel_dce_refs
7804: server crash (assertion failure) when querying: sys.querylog_catalog order by id desc
7805: ORDER BY ALL queries return data in reserve order
7806: Casting to decimal without precision and scale assumes wrong defaults
7808: BLOBs longer then 2 GiB cause a server crash
7810: You can have DATE string, but you cannot have GEOMETRY string to cast a string constant
7811: SELECT ‘x’ - ‘x’; gives weird error message.
7812: MONETDB HEAP BUFFER OVERFLOW
Extended MonetDB’s memory allocator framework from the SQL layer to all layers of the database server. The main features of the allocator framework include i) efficient processing of large numbers of memory allocation calls, and ii) efficient management of memory to avoid fragmentation. This update also enables fine-grained configuration and monitoring of memory usage per thread, query, etc.
This server is no longer compatible with the MonetDB Stethoscope.
Changed the way complex AND and OR expressions are handled. The new expression tree uses 2 new cmp flag (cmp_con/cmp_dis), both expressions hold lists of expressions. This structure reduces the need for stack space, allowing way larger expressions trees to be handled.
We no longer persist querylog results. If you want to keep the data, make a copy into an SQL table.
The default_fast and minimal_fast optimizer pipelines have been removed. The default_pipe and minimal_pipe optimizers now use the “fast” path always.
The type “pcre” has been removed. There was no way to create a value of the type, and there was only one function that used a value of the type. That function (pcre.index) has also been removed.
New implementation for the CONTAINS filter function for string data types using a much faster algorithm based on the knowledge of the bigram occurrences of the to-be-filtered column.
Add functions to_hex(int) and to_hex(bigint). They return the unsigned hexadecimal string representation of their argument.
COPY BINARY has been optimized to be much faster when many string columns are involved.
The performance of COPY BINARY of blob column has also been improved.
The performance of COPY BINARY ON CLIENT has been much improved. It used to be much slower than ON SERVER, now it’s only a little slower.
The file format for COPY BINARY strings has been extended. If the same string occurs multiple times, later occurrences can refer back to earlier occurrences instead of including another copy of the string. This improves both file size and processing time.
A new example tool ‘backrefencode’ has been added that can introduce these back references or remove them again.
Experimental support for compressed ON CLIENT transfers has been added. If you write ON ‘algo’ CLIENT, with algo=lz4/gz/xz/b2, the server compresses downloaded data and decompresses uploaded data server-side using the given algorithm. It is up to the user to ensure that the uploaded data has indeed been compressed. This is not always easy because many clients automatically compress or decompress data when the file name contains .gz, .lz4, etc., which would lead to double compression and decompression.
Implemented aggregates sha1, sha224, sha256, sha384, sha512, and
ripemd160 which calculate a checksum (digest) over a column of strings.
It only makes sense to use these with an ordering, as SELECT sha256(name ORDER BY id) FROM table, since the ordering in which the values are
fed into the digest algorithm is important and cannot otherwise be
guaranteed.
EXPLAIN now supports a BEFORE/AFTER LOGICAL UNNEST/LOGICAL REWRITE/PHYSICAL clause to indicate which phase of query compilation to show. A plain EXPLAIN is equivalent to EXPLAIN AFTER REWRITE, which is what PLAN used to do. The old EXPLAIN is now EXPLAIN PHYSICAL. LOGICAL REWRITE also supports specifying two positive values, rewriter index number and optimizer loop cycle stop counter. SHOW DETAILS includes more information about properties, rewriters number of changes and time spent.
The PLAN keyword has been removed.
The TRACE prefix for SQL queries now no longer produces two result sets. Before, the first result set was the result of the query, and the second result set was timing information of the query execution. This second result set is no longer produced. Instead, use the (already existing) function sys.tracelog() or the view sys.tracelog to retrieve this information. As before, the table that is produced by the function/view is reset whenever a new TRACE prefixed query is executed.
Removed table returning function sys.optimizer_stats().
There are new types “inet4” and “inet6” which can hold respectively IPv4 and IPv6 internet addresses without CIDR network mask information. Netmask information can be held in a separate column if they are needed. The 0 address (0.0.0.0 and ::) are used as NULL value and can therefore not be used as addresses. Bitwise operations (AND, OR, XOR, NOT) are supported on the addresses, and there are various functions to check whether an address is contained in a (sub)net (where an extra CIDR netmask column is also needed).
Added the possibility to specify IF NOT EXISTS for the following CREATE statements: CREATE SEQUENCE IF NOT EXISTS seq_name … CREATE USER IF NOT EXISTS user_name … CREATE ROLE IF NOT EXISTS role_name … CREATE TYPE IF NOT EXISTS type_name … CREATE INDEX IF NOT EXISTS index_name ON … CREATE IMPRINTS INDEX IF NOT EXISTS index_name ON … CREATE ORDERED INDEX IF NOT EXISTS index_name ON … With IF NOT EXISTS specified these CREATE statements will not return an error when an object with the same name already exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/
Added the possibility to specify IF EXISTS for the following DROP statements: DROP SEQUENCE IF EXISTS seq_name … DROP USER IF EXISTS user_name DROP ROLE IF EXISTS role_name DROP TYPE IF EXISTS type_name … DROP INDEX IF EXISTS index_name With IF EXISTS specified these statements will not return an error when the object does not exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/drop-statement/
Added the possibility to specify IF EXISTS for two ALTER statements: ALTER SEQUENCE IF EXISTS seq_name … ALTER USER IF EXISTS user_name … With IF EXISTS specified these statements will not return an error when the object does not exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/sequence-definition/ and https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/
It is now possible to change the type of a column by using a statement like ALTER TABLE t ALTER COLUMN c type;. The content of the column is converted to the new type using code similar to CAST(c AS type). If the conversion fails, the column type isn’t changed.
With COPY INTO, the USING DELIMITERS, DECIMAL, ESCAPE, NULL, BEST EFFORT and FWF clauses can now be given in any order. If a clause occurs multiple times, the last instance wins.
7635: Unexpected Inner Join Crash
7645: Unexpected Internal Error in Inner Join
7651: Incorrect Anti Join Result
7652: Incorrect Anti Join Result related to optimization
7653: Incorrect Inner Join Result
7667: MonetDB Mar2025-SP1 crashes at rel_selects with a circular view
7677: Misleading error message “Could not allocate space”
7694: Unexpected execution result
7695: Unexpected execution result
7696: Unexpected execution result
7697: Unexpected execution result
7698: Unexpected Right Join Result
7701: Add possibility to set MAX_WORKERS to NO MAX_WORKERS in ALTER USER
7703: Unexpected Left Join Result
7705: Unexpected Anti Join Result
7707: Unexpected Right Join Result
7708: Unexpected Join Result
7709: Monetdb crash when using field fcuntion
7711: Unexpected Crash
7712: Unexpected Out of Memory
7713: Monetdb crashes when using group by
7714: Monetdb crash when creating table using window function
7715: Unexpected Anti Join Result
7716: Unexpected Anti Join Result
7717: a crash when executing sql
7719: a crash using select
7720: MonetDB server (Mar2025-SP2-release) crashes at stmt_cond
7722: MonetDB server (Mar2025-SP2-release) crashes at rel_with_query
7725: MonetDB server (Mar2025-SP2-release) crashes at bin_find_smallest_column
7727: MonetDB server (Mar2025-SP2-release) crashes at exp_ref
7739: Unexpected Crash in Left Join
7741: crash in MonetDB
7745: Unexpected Execution Results
7748: MonetDB server crashes with “unexpected end of file” on UPDATE … RETURNING with EXISTS subquery
7751: Continuation of Bug #7737
7752: Internal error when executing a simple SQL query: TypeException:user.main[29]:‘mat.packIncrement’ undefined in: X_39:any := mat.packIncrement(X_37:bat[:lng], X_38:bat[:bte]);
7753: mserver5.exe crashes when executing a simple query
7763: MALexception throw in query with EXISTS and NULL