Jun2023 (11.47)

The Jun2023 documentation can be found here.

Jun2023-SP3 Bugfix Release (11.47.17)

MonetDB Common

  • Fixed a regression where after a while the write-ahead log files weren’t being rotated, meaning from some point onwards, the newest file just kept on growing.

  • When saving the SQL catalog during a low-level commit, we should only save the part of the catalog that corresponds to the part of the write-ahead log that has been processed. What we did was save more, which resulted in the catalog containing references to tables and columns whose disk presence is otherwise only in the write-ahead log.

  • A bug was fixed where the administration of which bats were in use was interpreted incorrectly during startup, causing problems later. One symptom that has been observed was failure to startup with a message that the catalog tables could not be loaded.

SQL Frontend

  • Added a missing interface function sys.timestamp_to_str with a TIMESTAMP (as opposed to TIMESTAMP WITH TIME ZONE) argument. The missing interface caused error messages being produced when the function was called with a TIMESTAMP argument, although it did give the correct result.

Bug Fixes

  • 7300: Implement missing standard SQL DATE and TIMESTAMP functions

  • 7324: string_distance(‘method’,str1, str2) as a generic distance function

  • 7409: Numpy table returning UDFs with variadic arguments

  • 7410: SIGSEGV cause database corruption

Jun2023-SP2 Bugfix Release (11.47.11)

  • Fixed an installation issue on Debian and Ubuntu introduced in the last build.

  • Do a lot more error checking, mostly for allocation failures. More is still needed, though.

  • Improve performance of the ILIKE operator when the pattern contains only ASCII characters. In this case we do not need to treat any characters as UTF-8 and we can use much faster routines that perform byte comparisons.

MonetDB Common

  • Fixed a number of data races (race conditions).

  • Fixed a reference counting problem when a BAT could nog be loaded, e.g. because of resource limitations.

  • Only check for virtual memory limits when creating or growing bats, not for general memory allocations. There is (still) too much code that doesn’t properly handle failing allocations, so we need to avoid those as much as possible. This has mostly an effect if there are virtual memory size restrictions imposed by cgroups (memory.swap.max in cgroups v2, memory.memsw.limit_in_bytes in cgroups v1).

  • The low-level commit turned out to always commit every persistent bat in the system. There is no need for that, it should only commit bats that were changed. This has now been fixed.

  • Implemented timeout/exit checks in a bunch more operators. Long(er) running operators occasionally check whether they’re taking too long (past a user-specified timeout) or whether the server is exiting. This is now done in more places.

Bug Fixes

  • 7094: Drop remote tables in transactions and rollback

  • 7303: Improve the performance of multi-column filters

  • 7400: VM max memory is not check correctly for cgroups v2

  • 7401: Column aliases used incorrectly in UNION subqueries

  • 7402: Privileges on merge table not propagated to partition tables

Jun2023-SP1 Bugfix Release (11.47.5)

MonetDB5 Server

  • There is now a new option –set tablet_threads=N to limit the number of threads used for a COPY INTO from CSV file query. This option can also be set for a specific database using the monetdb command using the ncopyintothreads property.

SQL Frontend

  • An upgrade that both creates a new .snapshot user and extends the sys.db_user_info table with (among others) a password column did these in such a way that the passord value for the new user was NULL. This is fixed by updating the password.

Bug Fixes

  • 7388: Query results in large cross product

  • 7394: BBPextend: ERROR: trying to extend BAT pool beyond the limit (163840000)

Jun2023 Feature Release (11.47.3)

Client Package

  • The COPY INTO from file ON CLIENT was extended to also look for a relative path name relative to the file from which the query was read. This is only possible if the name of the query file is known, so when it is specified on the command line or read using the interactive < command.

Mapi Library

  • Deprecate mapi_setfilecallback() in favor of mapi_setfilecallback2() which can handle binary downloads. For the time being, the old callback still works.

ODBC Driver

  • Extended Windows MonetDB ODBC Data Source setup program with option to specify a logfile to enable tracing of ODBC Driver API calls. On other platforms users can edit the odbc.ini file and add a line: logfile=/home/username/odbctrace.log When a logfile is specified it will start logging the ODBC Driver API calls to the logfile after a new connection is made via SQLConnect() or SQLDriverConnect() or SQLBrowseConnect(). Note that enabling ODBC logging will slow down the performance of ODBC applications, so enable it only for analysing ODBC Driver problems.

  • Enhanced SQLTables() by adding support for table type names: ‘BASE TABLE’, ‘GLOBAL TEMPORARY’ and ‘LOCAL TEMPORARY’ in parameter TableType. These are synonyms of: ‘TABLE’, ‘GLOBAL TEMPORARY TABLE’ and ‘LOCAL TEMPORARY TABLE’.

MonetDB5 Server

  • The MAL debugger code has been removed.

SQL Frontend

  • Add MAX_MEMORY and MAX_WORKERS options to the ALTER USER statement

  • Function ‘similarity(x string, y string)’ marked as deprecated and will be removed in the next release.

  • New functionality for string matching and similarity: startswith, endswith, contains, Levenshtein distance and Jaro-Winkler similarity. The functions startswith, endswith and contains have a version where a case insentive flag can be used. Also, there are new custom join functionality for startswith, endswith, contains, Levenshtein distance and Jaro-Winkler similarity.

  • Renamed previous Levenshtein distance to Damerau-Levenshtein distance.

  • New string function that transform from UTF-8 encoding to Ascii called asciify.

  • Session timeout feature improvement to start evaluating from the moment the procedure is called, instead of beginning of the session.

  • Queries stopped with the stop procedure are now marked as ‘aborted’ ‘finished’.

  • The DEBUG statement has been removed.

  • SQL function sys.queue() overloaded with sys.queue(username string), SYSADMIN only, allowing to filter the global queue by username or use ‘ALL’ to retrieve the global queue. Calling the function without arguments returns the queue for the current user.

  • SQL procedures sys.pause(tag bigint), sys.resume(tag bigint), sys.stop(tag bigint) overloaded with sys.pause(tag bigint, username string), sys.resume(tag bigint, username string) and sys.stop(tag bigint, username string), SYSADMIN only, allowing to pause, resume and stop query executions by TAG, USERNAME. The call without arguments is a public procedure giving access to users to pause, resume and stop their own query executions.

  • Added support of ODBC escape sequences syntax to SQL layer. Now all clients (including ODBC/JDBC/pymonetdb) can use them without further processing. For details on ODBC escape sequences syntax see: https://learn.microsoft.com/en-us/sql/odbc/reference/appendixes/odbc-escape-sequences

  • It is no longer allowed to create a merge table or remote table or replica table or unlogged table in schema “tmp”. The tmp schema is reserved for temporary objects only, such as local/global temp tables.

  • System views sys.dependency_tables_on_functions and dependency_views_on_functions have been extended with column: function_id.

  • When loading data using COPY BINARY INTO, apply default values instead of just inserting NULLs.

  • When loading data using COPY BINARY INTO, validate DECIMAL(prec,scale) and VARCHAR(n) column width.

  • When loading data using COPY BINARY INTO, string used to have their line endings converted from CR LF to LF. Do not do this, it is the responsibility of the client.

  • Implemented dumping binary data using COPY SELECT … INTO BINARY <file(s)>.

  • Removed code for Workload Capture and Replace, including system schemas “wlc” and “wlr” and the objects in those schemas. The code was experimental, and it didn’t work out. A different approach will be taken.


  • The monetdb get, inherit, lock and release commands are extended with ‘apply-to-all’ syntax similar to related functionality: Usage: monetdb set property=value [database …] sets property to value for the given database(s), or all Usage: monetdb inherit property [database …] unsets property, reverting to its inherited value from the default configuration for the given database(s), or all Usage: monetdb lock [-a] database [database…] Puts the given database in maintenance mode. Options: -a locks all known databases Usage: monetdb release [-a] database [database …] Brings back a database from maintenance mode. Options: -a releases all known databases

Bug Fixes

  • 7311: Missing REGEXP_REPLACE function.

  • 7344: Database upgrade failure due to user object dependency on system procedure

  • 7348: Subquery inside case always evaluated

  • 7378: MonetDB server crashes at sql_trans_copy_key

  • 7379: MonetDB server 11.46.0 crashes at cs_bind_ubat

  • 7380: MonetDB server 11.46.0 crashes at BLOBcmp

  • 7381: MonetDB server 11.46.0 crashes at log_create_delta

  • 7382: MonetDB server 11.46.0 crashes at gc_col

  • 7383: MonetDB server 11.46.0 crashes at list_append

  • 7384: MonetDB server 11.46.0 crashes at __nss_database_lookup

  • 7386: MonetDB server 11.46.0 crashes in rel_deps

  • 7387: MonetDB server 11.46.0 crashes in rel_sequences