Tags give the ability to mark specific points in history as being important
-
-
26.1.1
c6c37afb · ·[26.1.1] - 2026-03-24 Features - Unified socket configuration: introduce new `instance.iproto`, `instance.http`, and `instance.pgproto` config sections that consolidate listen/advertise/TLS settings per protocol. Old top-level parameters (`instance.iproto_listen`, `instance.iproto_advertise`, `instance.http_listen`, `instance.pg`) are deprecated but remain functional. HTTP server is now enabled by default on port 5327. HTTP and pgproto peer addresses are stored in `_pico_peer_address` system table with corresponding connection types (`http`, `pgproto`, `plugin:<name>.<service>`). - Rework SQL execution protocol for DML queries to reduce data transfer. - Support JSON_EXTRACT_PATH function. - Introduce non-blocking SQL execution to prevent fiber starvation. - New column `sync_incarnation` is added to `_pico_instance` system table. - New ALTER SYSTEM parameter `governor_check_replication_error` (default: true) enables the checking if replication is broken on any instance, in which case the instance will be automatically made Offline. - New ALTER SYSTEM parameter `sql_log` (default: false) enables logging of all SQL statements to log file. - Add CREATE TABLE syntax "PRIMARY KEY (bucket_id, ...)": - When this syntax is used, there is no separate 'bucket_id' index; - Instead, 'bucket_id' is included as the first part of the primary key index. - New columns `target_state_reason` & `target_state_change_time` in `_pico_instance` system table - Added env option PICODATA_UNSAFE_FORCE_RECOVERY. - Possible values: true, false. - This option is passed to Tarantool as `force_recovery` option. - If force_recovery equals true, Tarantool tries to continue if there is an error while reading a snapshot file (at server instance start) or a write-ahead log file (at server instance start or when applying an update at a replica. - Introduce `read_preference` option for routing DQL queries to replicas in specific scenarios. - Introduce `pico_stmt_invalidation` option for getting errors when binding invalid statements. - Introduce `pico_query_metadata` option for getting distribution key metadata. - Introduce `sql_preemption_opcode_max` to control the VDBE opcode interval between execution time checks when `sql_preemption` is enabled. - New ALTER SYSTEM parameter `sql_runtime_concurrency_max` (default: `1`) limits the number of simultaneously executing SQL requests per instance. - Support cluster update to next major version (26.1.0). - Support compatibility between the next major Picodata version and older plugin versions. - Add support for `EXPLAIN (RAW)` for queries that fail at local sql execution stage. - Add unlogged tables to SQL: - Unlogged tables' updates are not writeen into the WAL, so they are not persisted on restarts of an instance and are not replicated. On leader change, all unlogged tables are truncated to prevent inconsistencies. Creating unlogged tables is possible with the `CREATE UNLOGGED TABLE ...` syntax. Unlogged tables are implemented as Tarantool data-temporary spaces, so it is not possible to store them using the vinyl engine. - \[breaking\] Instead of always being a tier with name `default`, default tier is now the first tier mentioned in the config. - Add support for `compression_level` Vinyl option for secondary indices created with `CREATE INDEX`. - Add support for Vinyl index options (`bloom_fpr`, `page_size`, `range_size`, `run_count_per_level`, `run_size_ratio`, `compression_level`) in `CREATE TABLE ... WITH (...)` syntax for configuring implicit primary key and bucket_id indices. - Add suppoort for anonymous blocks. An anonymous block is a sequence of statements that execute queries transactionally. Blocks are single-bucket, meaning that all the queries within the block must be executed on the same bucket (or have distribution any). - Add optimization for Limit + Distinct and Limit + OrderBy. When certain conditions are met, the Limit node is added to the local stage of SQL query plan. Supported statements are: - QUERY: execute the given query; - RETURN QUERY: execute the given query and return its result. - Add detailed health status endpoint (`/api/v1/health/status`) with instance, Raft, bucket, and cluster information. - Add support for Kubernetes startup, liveness and readiness probes. - Support `bucket_count=0` for tiers. A tier with `bucket_count=0` has no sharded data (only global system tables) and is intended for "arbiter" tiers used in Raft consensus. Vshard bootstrap and configuration are skipped for such tiers, and replicaset expel proceeds without waiting for bucket transfer. Creating sharded tables on a zero-bucket tier is rejected with a clear error. - Add support for `EXPLAIN (RAW)` for block queries. - Speed up instance restart by actively trying to identify the raft leader instead of waiting for it to send a heartbeat to us. - Refactor the plan id calculation for more accurate and faster caching. - ACL/ALTER SYSTEM/ALTER INDEX RENAME operations now support WAIT APPLIED GLOBALLY / WAIT APPLIED LOCALLY syntax and default to globally, matching DDL behavior. - Add bucket estimation for INSERT queries in explain. - Support reading from global tables in anonymous blocks; writing is not supported yet. - Upgrade Tarantool from 2.11.5 to 2.11.8. - Add migration context validation API into plugin SDK. - Introduce a local SQL execution path for eligible queries that bypasses `iproto` on the current instance; usage is exposed via the `pico_sql_local_query_total` and `pico_sql_local_query_duration` metrics. - Remove unnecessary `Motion(Full)` for queries that are guaranteed to be routed to a single node due to the sharding key filter. CLI - Completely re-architected `picodata demo` subcommand: - Fixed improper signal handling (SIGINT, SIGTERM) and process termination. - Added graceful shutdown and guaranteed cleanup of child processes. - Introduced cluster orchestration model for simplified lifecycle management. - Added configurable command-line parameters and cluster information display. - Add machine-readable output formats to `picodata admin` - Add long version output (-VV) with more info WebUI - Webui now displays the value of `cluster_version` instead of current instance's version. That way you can easily tell if the cluster has been upgraded successfully or not yet. - the display of the target state in the instance card has been removed - the ability to group by replicas has been removed - added a visual indication of the problem status for the offline instance counter - virtualization has been applied to the tiers and instance list - the cluster information is displayed in the header - the filter has been redesigned, now it is constantly displayed in front of the list of shooting ranges or instances. Added the ability to filter by text and by tags, such as dash name, replica set name, instance name, version, status. Fixes - Fixed that governor would hang indefinitely if an Offline replicaset had target_master_name != current_master_name. - Fixed that instance would hang indefinitely when trying to join the cluster if the cluster becomes too big. 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 instances which already joined the cluster. - Fixed a crash when SQL request arrives before instance is properly initialized - Fixed that instances would be made Offline immediately after a raft entry is applied if there weren't any entries applied for a long time before that - Fixed that instances would randomly fail with ER_READONLY during bootstrap - Fixed ER_BOOTSTRAP_CONNECTION_NOT_TO_ALL failure during instance join stage. - Fixed that governor would send redundant proc_sharding RPCs which would make it impossible to deploy huge clusters. Now RPCs from governor are split into batches of configurable size (default 200, ALTER SYSTEM parameter `governor_rpc_batch_size`). - Improve upgrade flow for creating Lua stored functions (exported to SQL). - Node construction is now deferred until actually needed, avoiding unnecessary work for cached queries on any instance execution - Fixed a memory leak in SQL API of plugin SDK - `picodata status` no longer panics when `stdout`, `stderr`, or both are redirected to a broken pipe. - Fixed that the whole replicaset would be broken if one instance get's a replication conflict. (See also https://git.picodata.io/core/picodata/-/issues/2231). - Fixed that governor would sometimes be blocked in read_only on a DDL operation mode not being able to apply any subsequent raft operations. - Introduce unnamed_join alias for motions with joins under them to distinguish columns with identical names - Governor RPC batching is also implemented for proc_apply_schema_change. - Governor RPC batching is also implemented for proc_apply_backup. - Datetime literals should support `yyyy-mm-dd` format, e.g. `select '2026-01-17'::datetime`. - Fix type inference for the `a BETWEEN b AND c` expression; now types of `a`, `b` and `c` should be properly unified, meanining that `select '2026-01-13' between '2026-01-01'::datetime and '2026-01-20'` will work as expected. - Fixed that upgrading between patch versions wouldn't run upgrade scripts. - Fixed assertion failure in CAS right after raft leader change followed by persisted raft log tail truncation. - Fixed instance.vinyl.* options to be applied to primary and bucket_id indices. - Fixed a crash in proc_runtime_info when the last applied raft entry contained a unicode string where a 100th byte position was not on a character boundary. - Fixed that sentinel_loop was broken during upgrade from versions before 25.5.3. - Fixed ignoring `NULLS FIRST` and `NULLS LAST` in unnamed window queries with ordering. - Fixed metadata loss in queries with LIMIT clause in picodata admin. - Fixed invalid volatile flag for rust-implemented builtin functions. - Fixed governor's `ConfigureReplication` step was broken during upgrade from before 25.5.3 - Fixed that instances from tiers with can_vote=false attempting to promote to raft leader. - Fixed that `--pg-advertise` CLI argument was erroneously disallowed to be used simultaneously with `--iproto-advertise`. - Fixed a race condition between DDL (i.e., TRUNCATE) and DQL when the preemption option is enabled. - Fixed concurrent access to storage temporary tables by synchronizing their lifecycle and execution with a per-plan lock. - Fixed a number of vinyl issues by backporting upstream patches - Fixed an issue where upgrade operations were inserted incorrectly when applying system catalog changes for several catalog versions. - Fixed `picodata plugin configure` panic on attempt to update non-existent plugin or a non-existing service of an existing plugin. - Fixed `proposal dropped` errors sometimes being returned from DDL commands for example when raft is unknown. - Fixed an RPC to avoid skipping metrics collection code path on early return in procedure implementation. - Make sure that single-tiered clusters upgraded from 25.3.x always have a default tier. - Fixed that instances would fail with ER_READONLY while joining a replicaset whose master was still bootstrapping. Governor no longer triggers mastership failover for a master that is in the initial Offline(0) join state and has not yet had a chance to become Online. - Fixed local SQL iterators to survive fiber yields during table truncation. - Fixed a caching bug affecting `UNION` queries with global and sharded tables in a cluster of several replicasets. - Fixed a caching bug that caused some different queries to tables with `bucket_id` in the primary key to have the same plan id. - Fixed SUM/AVG type resolution for Double - Fixed incorrect filter pushdown into compound queries containing window functions. Observability - All duration-based metrics now report in fractional seconds instead of milliseconds for consistency with Prometheus and more precision. - RPC request durations now use a monotonic high-precision clock instead of the event-loop clock to improve timing accuracy. - Added SQL temp-table lock metrics: `pico_sql_temp_table_leases_total` and `pico_sql_temp_table_lock_waits_total`. Breaking changes - Remove `tros` and `tarolog` dependencies from `picodata-plugin`. These libraries can still be used as direct dependencies when needed. - Hashing behavior changed for `DOUBLE` type fields in primary keys and distribution keys. Previously, values were always re-encoded as MP_DOUBLE (9 bytes) before hashing. Now, integer-representable doubles (e.g., `1.0`) are converted to integer encoding before hashing, making them hash identically to their integer equivalents (e.g., `1`). This is correct behavior that allows lookups like `SELECT * FROM t WHERE double_col = 1` to find rows inserted with `double_col = 1.0`. However, existing data sharded on `DOUBLE` keys containing integer values may have different bucket assignments after upgrade. -
25.5.9
fed09c14 · ·[25.5.9] - 2026-03-20 Fixes - Support cluster update to next major version (26.1.0). - Fixed incorrect filter pushdown into compound queries containing window functions.
-
-
25.5.8
8947561f · ·[25.5.8] - 2026-02-25 Features - New ALTER SYSTEM parameter `sql_log` (default: false) enables logging of all SQL statements to log file. - Introduce `sql_preemption_opcode_max` to control the VDBE opcode interval between execution time checks when `sql_preemption` is enabled. - Fixed local SQL iterators to survive fiber yields during table truncation. Fixes - Fixed that `--pg-advertise` CLI argument was erroneously disallowed to be used simultaneously with `--iproto-advertise`. - Fixed an issue where upgrade operations were inserted incorrectly when applying system catalog changes for several catalog versions.
-
25.5.7
b254d360 · ·[25.5.7] - 2026-02-10 Fixes - Fixed a number of vinyl issues by backporting upstream patches
-
25.5.6
14c64653 · ·[25.5.6] - 2026-02-06 WebUI - Webui now displays the value of `cluster_version` instead of current instance's version. That way you can easily tell if the cluster has been upgraded successfully or not yet. Fixes - Fixed governor's `ConfigureReplication` step was broken during upgrade from before 25.5.3 - Fixed that instances from tiers with can_vote=false attempting to promote to raft leader. - Fixed a crash in case of any error during TRUNCATE operation. - Fixed a race condition between DDL (i.e., TRUNCATE) and DQL when the preemption option is enabled.
-
25.5.5
2851d7f3 · ·[25.5.5] - 2026-01-26 Fixes - Fixed assertion failure in CAS right after raft leader change followed by persisted raft log tail truncation. - Fixed a crash in proc_runtime_info when the last applied raft entry contained a unicode string where a 100th byte position was not on a character boundary. - Added env option PICODATA_UNSAFE_FORCE_RECOVERY. - Possible values: true, false. - This option is passed to Tarantool as `force_recovery` option. - If force_recovery equals true, Tarantool tries to continue if there is an error while reading a snapshot file (at server instance start) or a write-ahead log file (at server instance start or when applying an update at a replica. - Always open vylog files with O_SYNC. - Fixed that sentinel_loop was broken during upgrade from versions before 25.5.3. -
25.5.4
36fbec30 · ·[25.5.4] - 2026-01-21 Fixes - Introduce unnamed_join alias for motions with joins under them to distinguish columns with identical names - Fix erroneous logic of counting rows returned from replicasets which led to undercovered limit exceedance errors. - Fixed that upgrading between patch versions wouldn't run upgrade scripts. - Datetime literals should support `yyyy-mm-dd` format, e.g. `select '2026-01-17'::datetime`. - Fix type inference for the `a BETWEEN b AND c` expression; now types of `a`, `b` and `c` should be properly unified, meanining that `select '2026-01-13' between '2026-01-01'::datetime and '2026-01-20'` will work as expected.
-
25.5.3
acd5dde4 · ·[25.5.3] - 2026-01-15 Features - Support JSON_EXTRACT_PATH function. - New column `sync_incarnation` is added to `_pico_instance` system table. - New ALTER SYSTEM parameter `governor_check_replication_error` (default: true) enables the checking if replication is broken on any instance, in which case the instance will be automatically made Offline. - New columns `target_state_reason` & `target_state_change_time` in `_pico_instance` system table Fixes - Fixed that the whole replicaset would be broken if one instance get's a replication conflict. (See also https://git.picodata.io/core/picodata/-/issues/2231). - Fixed that governor would sometimes be blocked in read_only on a DDL operation mode not being able to apply any subsequent raft operations.
-
25.5.2
f9918efd · ·[25.5.2] - 2025-12-26 Features - Rework SQL execution protocol for DML queries to reduce data transfer. - Introduce non-blocking SQL execution to prevent fiber starvation. Fixes - Fixed that governor would hang indefinitely if an Offline replicaset had target_master_name != current_master_name. - Fixed that instance would hang indefinitely when trying to join the cluster if the cluster becomes too big. 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 instances which already joined the cluster. - Fixed a crash when SQL request arrives before instance is properly initialized - Fixed that instances would be made Offline immediately after a raft entry is applied if there weren't any entries applied for a long time before that - Fixed that instances would randomly fail with ER_READONLY during bootstrap - Improve upgrade flow for creating Lua stored functions (exported to SQL). - Fixed that governor would send redundant proc_sharding RPCs which would make it impossible to deploy huge clusters. Now RPCs from governor are split into batches of configurable size (default 200, ALTER SYSTEM parameter `governor_rpc_batch_size`). - Node construction is now deferred until actually needed, avoiding unnecessary work for cached queries on any instance execution - Fixed a memory leak in SQL API of plugin SDK
-
-
25.5.1
e1117450 · ·[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. -
-
25.4.4
3553ab14 · ·[25.4.4] - 2025-11-12 Fixes - Fixed a bug where the raft snapshot would sometimes contain incorrect term which would result in an unrecoverable failure of the receiving instance. - 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). - DML to global tables no longer will fail with errors such as "Compacted" (See also https://git.picodata.io/core/picodata/-/issues/2273). - Fix trigger execution and privilege initialization for scram-sha256 auth in pgproto. SQL - Add IF NOT EXISTS support for ALTER TABLE ADD COLUMN. 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.
-
25.3.8
1b8c0700 · ·[25.3.8] - 2025-10-23 Fixes - Fixed an out-of-memory crash when using Response::encode_rmp with large collections in plugin API (see also https://git.picodata.io/core/picodata/-/issues/2028). - Fixed a bug where the raft snapshot would sometimes contain incorrect term which would result in an unrecoverable failure of the receiving instance.
-
25.3.7
86f6fc1c · ·[25.3.7] - 2025-10-16 Fixes - 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). SQL - Add IF NOT EXISTS support for ALTER TABLE ADD COLUMN.
-
25.4.3
6bc41a51 · ·[25.4.3] - 2025-10-15 Fixes - 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. - 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). 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).
-
25.3.6
4e41c22f · ·[25.3.6] - 2025-10-10 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).
-
25.4.2
abc7b7b5 · ·[25.4.2] - 2025-10-09 Fixes - Fix compilation error on ARM architecture. - Fix eliminate erroneous ER_READONLY message in logs when executing TRUNCATE on global tables sometimes. WebUI - Add a login form and JWT-based session management. The JWT secret is stored in the `_pico_db_config` table as `jwt_secret`. Set `jwt_secret` to an empty string ("") to disable authentication. On upgrade, Picodata leaves the existing `jwt_secret` unchanged. To enable web authentication on existing clusters, reset `jwt_secret` via the `ALTER SYSTEM` API.