[25.1.1] - 2025-02-21
Configuration
- New alter system parameters - `sql_vdbe_opcode_max` and `sql_motion_row_max`.
- Default config name is `picodata.yaml`.
- The default names for replicaset and instance are now generated using the following patterns:
- ReplicaSet Name: `{tier_name}_{replicaset_number_in_this_tier}`
- Instance Name: `{tier_name}_{replicaset_number_in_tier}_{instance_number_in_replicaset}`
- New parameters for Vinyl configuration: `bloom_fpr`, `max_tuple_size`, `page_size`, `range_size`,
`run_count_per_size`, `run_size_ratio`, `read_threads`, `write_threads` and `timeout`.
- New parameter for Memtx configuration: `max_tuple_size`.
- `plugin_dir` parameter is renamed to `share_dir` (--plugin-dir -> --share-dir,
PICODATA_PLUGIN_DIR -> PICODATA_SHARE_DIR, config: instance.plugin_dir ->
instance.share_dir)
- The following parameters has been moved from configuration file to `_pico_db_config` system table:
- checkpoint_interval
- checkpoint_count
- max_concurrent_messages
- `max_heartbeat_period` removed from `_pico_db_config`
- CLI parameter `service_password_file` removed from arguments. To set a password for connecting to the cluster, create a file named `.picodata-cookie` in the instance's directory and store the password there.
- Major renaming of parameters from _pico_db_config:
- `max_concurrent_messages` renamed to `iproto_net_msg_max`
- `password_min_length` renamed to `auth_password_length_min`
- `password_enforce_uppercase` renamed to `auth_password_enforce_uppercase`
- `password_enforce_lowercase` renamed to `auth_password_enforce_lowercase`
- `password_enforce_digits` renamed to `auth_password_enforce_digits`
- `password_enforce_specialchars` renamed to `auth_password_enforce_specialchars`
- `max_login_attempts` renamed to `auth_login_attempt_max`
- `auto_offline_timeout` renamed to `governor_auto_offline_timeout`
- `max_pg_statements` renamed to `pg_statement_max`
- `max_pg_portals` renamed to `pg_portal_max`
- `snapshot_chunk_max_size` renamed to `raft_snapshot_chunk_size_max`
- `snapshot_read_view_close_timeout` renamed to `raft_snapshot_read_view_close_timeout`
- `cluster_wal_max_size` renamed to `raft_wal_size_max`
- `cluster_wal_max_count` renamed to `raft_wal_count_max`
- `listen`, `advertise` parameters are renamed to `iproto_listen`, `iproto_advertise`
- Added scopes to all parameters from `_pico_db_config`. There are two scopesright now - `tier`
and `global`. Parameters with scope `tier`
can be different on different tiers.
For example `ALTER SYSTEM SET parameter_with_scope_tier FOR ALL TIERS` or
`ALTER SYSTEM SET parameter_with_scope_tier FOR TIER default`.
Parameters with scope `global` are the same on each instance.
- `instance.shredding` moved to `cluster` section and is now defined at bootstrap only.
CLI
- `picodata expel` takes instance uuid instead of instance name.
- `picodata expel` now doesn't allow expelling Online instances and replicaset
masters by default.
New `--force` flag can be used to forcefully expel an Online instance which
will shutdown once it finds out it got Expelled.
- String cells are now output without double quotes during SELECT.
- `picodata connect` and `picodata admin` return a non-zero exit code for file inputs with errors.
- `picodata --version` now provides verbose output, including the build type (static or dynamic) and the build configuration (release or debug)
- New command `picodata status` which prints all current members of the cluster and their status.
Pgproto
- Support LDAP authentication method
Compatibility
- Added unique index on column `uuid` for `_pico_instance` table. IDs
of `_pico_instance_raft_id` and `_pico_instance_replicaset_name` now equals
to 2 and 3.
- New special command `\set delimiter enter` to change the default delimiter to EOL (End Of Line). Introduced a new inner prompt prefix to indicate when input is waiting for a delimiter. EOF is now treated as a delimiter when reading files.
- New field `_pico_property.system_catalog_version` representing version of a system catalog.
It may not be changed at every release, so this is not autoincrementing value.
- From now on, when joining a cluster, an instance's version must be the same as the cluster's version or one minor version higher. For example, if the cluster's version is 25.1, only instances with versions 25.1 or 25.2 can join.
- In the `_pico_property` table, there is a new field called `cluster_version`, which shows the global version of the cluster.
- In the `_pico_instance` table, there is a new field called `picodata_version` that displays the version of the executable running on the instance.
- The global `cluster_version` is updated by the governor only when every instance in the cluster has been upgraded to the new minor version.
- System table `_pico_peer_address` has a new column `conncetion_type` that indicates the connection type of the peer. It can be `iproto` or `pgproto`.
- Global rename
- Config File Changes:
- `data_dir` renamed to `instance_dir`
- Source Code Changes:
- `data_dir` renamed to `instance_dir`
- Environment Variable Changes:
- `PICODATA_DATA_DIR` renamed to `PICODATA_INSTANCE_DIR`
- PgProto is now enabled by default and listens at `127.0.0.1:4327`.
- Prevented non-admin users with the DROP TABLE privilege from dropping system tables.
- SQL query parameters renamed:
- `vdbe_max_steps` to `sql_vdbe_opcode_max`
- `vtable_max_rows` to `sql_motion_row_max`
- `SCALAR` and `NUMBER` data types are not supported anymore.
RPC API
- `.proc_expel` and `.proc_expel_redirect` takes instance uuid instead of instance name.
Fixes
- It's no longer possible to execute DML queries for tables that are not operable
- Fixed panic on user/role creation when max user number was exceeded
- `picodata expel` used to finish before the instance got finally expelled.
Now it will block until the instance is completely expelled, or the timeout
is exceeded.
- Fixed a bug, where we would allow to create more than 2 versions of the same
plugin (and panic when compiled in debug mode).
- `DROP PLUGIN` now leaves the plugin's data in the database if `WITH DATA`
wasn't specified. Previously we would return an error instead.
SQL
- SQL support `SUBSTRING` function
- SQL support window functions