[25.5.1] - 2025-12-19
Features
- Change the default memtx_checkpoint_count from 2 to 1. If a user needs a checkpoint, they can use SQL BACKUP statement, no need to occupy extra space by default.
- Reduce the frequency of heartbeats sent to raft learners, reducing the cluster traffic.
- Refactor SQL executor to reduce memory allocations.
- Plugins and webUI now support scram-sha256 auth.
- SQL optimizer may now select indices for comparison operators with mixed number
types (e.g. pk int < decimal) and datetime.
- Vinyl improvements to decrease in-memory page index size.
- Add HTTPS support for metrics and WebUI
- Add the _pico_bucket(tier_name) function to show vshard bucket distribution.
Fixes
- Fix compilation error on ARM architecture.
- Fix eliminate erroneous ER_READONLY message in logs when executing TRUNCATE on
global tables sometimes (See also https://git.picodata.io/core/picodata/-/issues/2274).
- Fix possible crash when using TLS for iproto communication within cluster.
- Specifying `instance.iproto_tls.enable` parameter via configuration file.
- Prevent conflicts when creating tables with renamed table names.
- Fix CREATE TABLE hanging on index conflict.
- Print upper bound of a signed 64-bit integer for ALTERing the `sql_storage_cache_count_max`,
instead of an unsigned 64-bit integer, after `UNSIGNED` has been deleted internally and range
has been changed.
- Resolve hang when using TLS (hang in `ssl_iostream_destroy` when fiber is cancelled).
- Resolve hang when using TLS (fix infinite loop in coio_writev_timeout on SSL_ERROR_ZERO_RETURN).
- Fix Service::on_leader_change callbacks not being called after master goes Offline
due to sentinel auto-offline policy (See also https://git.picodata.io/core/picodata/-/issues/2303).
- Fixed a bug where the raft snapshot would sometimes contain incorrect term
which would result in an unrecoverable failure of the receiving instance.
- DML to global tables no longer will fail with errors such as "Compacted"
(See also https://git.picodata.io/core/picodata/-/issues/2273).
- Fix `use-after-poison` in `proc_sql_execute`.
- Fixed a bug which made the effective value of `pg_portal_max` be the same as `pg_statement_max`
- Fix trigger execution and privilege initialization for scram-sha256 auth in pgproto.
- Fixed possible ER_BOOTSTRAP_READONLY failure during instance bootstrap.
- Fixed ER_BOOTSTRAP_CONNECTION_NOT_TO_ALL failure during instance join stage.
- Fixed a possible bootstrap failure when joining multiple instances at the same
time. NOTE: The fix requires modifying the proc_raft_join RPC response format
which technically breaks compatibility with previous versions of picodata.
However picodata explicitly doesn't support heterogeneous joins (when version
of joining instances mismatches version of cluster), so this shouldn't be a
problem for anybody. NOTE also that this doesn't affect restarting already
instances which already joined the cluster.
- Fix pico_instance_state metric to report correct value on all instances
- Fixed a bug where some queries that changed the table schema checked WRITE permissions instead of ALTER permissions.
- Fix `DO NOTHING` conflict policy error on unique indices for globally distributed tables.
- Lua datetime functions `to_char` and `to_date` are now strict (returns `NULL` when at least one argument is `NULL`).
- Fix name resolution in HAVING if projection contains a param.
- Fixed that vshard would consume non-negligible amount of resources when idling
on big cluster setups.
WebUI
- Login form and simple session control
- Introduce display of used memory in terms of tier
ACL
- Support granting CREATE privilege on specific table.
SQL
- Support indexing arrays, i.e. `a[1][2]` expressions.
- Support indexing maps with string keys, i.e. `m['key']` expressions.
- Add IF NOT EXISTS support for ALTER TABLE ADD COLUMN.
- Support for a new set of volatile scalar functions, providing service information:
- `pico_instance_name()`: returns a name of the current instance.
- `pico_replicaset_name()`: returns a name of the replicaset in which current instance is.
- `pico_tier_name()`: returns a name of the tier in which current replicaset of current instance is.
- `pico_instance_dir()`: returns an absolute path to the current instance working directory
(do not confuse with share directory, which is used for plugins).
- `pico_config_file_path()`: return an absolute path to the current instance configuration file. It
does not check whether the config exist, it will still return the initial path. If the instance was
started without specifying an instance config, it will return `null`.
- Support ALTER INDEX RENAME command to rename an existing index.
- Introduced various optimizations reducing memory allocations and
eliminating unnecessary plan traversals and modifications.
Some highlights:
- Eliminated unnecessary parameter clones.
- Skipped optimizations for plans that cannot benefit from them.
- Cached results of some transformations.
- Eliminated allocations in various places.
- Avoided sending unused vtables for INSERT queries.
As a result:
- INSERT performance increased by 20%-70% depending on the size of the rows.
- TPC-B performance increased by ~10%.
- Add INDEXED BY clause. It is sqlite feature which allows to specify index for
table lookup.
Pgproto
- Add support for configuring pgproto TLS certificates via:
- `instance.pg.ssl` (enable/disable TLS)
- `instance.pg.cert_file` (client certificate path)
- `instance.pg.key_file` (private key path)
- `instance.pg.ca_file` (CA certificate path).
Observability
- Added metrics `pico_sql_global_dml_query` and `pico_sql_global_dml_query_retries`
which report respectively the total number of SQL DML operations on global
tables and number of times these operations had to be retried due to CAS conflicts.
Configuration
- Changed default value for `raft_wal_count_max` ALTER SYSTEM parameter from 64 to 16384.