github readysettech/readyset stable-260528

one day ago

Release Notes

NEW! We now have an MCP server for use with Readyset.

Readyset is currently released as a docker container and Linux distro binary packages. For installation with docker, see the Install with Docker documentation. Available Linux distribution binary packages for x86_64/amd64 and arm64/aarch64 include deb package for Ubuntu 22.04, Debian 12 and later, and rpm packages for Amazon Linux 2023 and RedHat 9. See package installation instructions.

What's New

  • b9a198a: Added group commit support for the PostgreSQL replication connector, coalescing multiple committed transactions into a single batch before flushing to Readyset. This reduces RPC overhead and improves replication throughput under high write rates. Uses the same configuration parameters as the MySQL connector: group_commit_max_trx, group_commit_wait_us, and replication_batch_size.
  • c4d2ab3: Fixed SET time_zone handling for lowercase or mixed-case IANA names (e.g., us/eastern), matching MySQL’s case-insensitive lookup.
  • a43fe8b: Improved error reporting during configuration verification. Failures to connect as an allowed user now include the underlying error (e.g., TLS certificate validation failure) instead of a generic Failed to establish connection message.
  • 7a32213: Fixed a cryptic panic in the adapter runtime when the metrics HTTP listener port was already in use. The failure is now logged with the address that could not be bound.
  • beaead2: The adapter now listens on both IPv4 and IPv6 by default. The MySQL adapter binds to [::]:3307 (dual-stack, all interfaces), and the PostgreSQL adapter binds to 127.0.0.1:5433 and [::1]:5433 (IPv4 and IPv6 loopback). --address now accepts multiple values to bind to several interfaces.
  • 24e7114: LATERAL COUNT queries that reference the count in WHERE, HAVING, ORDER BY, GROUP BY, or JOIN ON clauses over single-relation filters are now correctly rewritten to COALESCE(col, 0) after LEFT JOIN inlining, preserving COUNT-over-empty semantics.
  • 1948672: Fixed SELECT DISTINCT queries with range parameters returning incorrect results when combined with aggregate functions (e.g., SELECT DISTINCT count(col) FROM t WHERE col > ? GROUP BY category).
  • 425a51e: PostgreSQL now supports Readyset query hints (/*rs+ CREATE SHALLOW CACHE */ and /*rs+ SKIP CACHE */) for both the simple and extended protocols.
  • d10fc36: CREATE CACHE now returns a row containing metadata about the newly created cache, including its query ID, name, query text, and whether it is a deep or shallow cache.
  • a191556: Added a new readyset-mcp standalone binary that brings MCP (Model Context Protocol) support to Readyset, allowing AI assistants such as Claude Code and Cursor to introspect deployments and manage caches via stdio. Configuration is handled via environment variables, and TLS to the Readyset SQL listener is supported.
  • c220398: Readyset now includes an embedded MCP (Model Context Protocol) HTTP endpoint, enabled with --enable-mcp, allowing AI assistants to introspect deployments and manage caches over HTTP. Access is controlled via bearer tokens managed through CREATE, SHOW, ALTER, and DROP MCP TOKEN, each with a defined scope (read_only, cache_admin, full).
  • 1b059bc: Fixed a thread leak that could cause Readyset to panic after repeated CREATE CACHE statements.
  • 1189d2b: Fixed a silent COM_CHANGE_USER authentication failure that rejected valid credentials when the client (e.g., ProxySQL) reused the handshake-time authentication response instead of recomputing it after the server’s AUTH_SWITCH_REQUEST.
  • c40661c: Fixed a wire encoding mismatch where AVG over BIGINT in cached queries with range or WHERE IN parameters returned a different NUMERIC scale than upstream PostgreSQL.
  • 03a3211: Fixed AVG(x) OVER (...) on DECIMAL/NUMERIC columns returning trailing digits due to f64 arithmetic instead of the dialect-correct value.
  • e0bf9e6: Standardized and converted to snake_case the column names emitted by SHOW CACHES, SHOW PROXIED QUERIES, EXPLAIN CREATE CACHE, and SHOW SHALLOW CACHE ENTRIES.
  • 214c5d2: Improved performance for text-heavy workloads by caching collation key hashes and storing them in persistent state. Persistent state is automatically re-snapshotted on upgrade.
  • 26db2e2: Under a non-UTC session time_zone, TIMESTAMP and DATETIME wire output is now emitted as unshifted UTC wall-clock time. This prevents mismatches with derived values such as EXTRACT(HOUR FROM ts), which are not converted from UTC.
  • 06ba0dc: Non-UTC SET @@time_zone is now marked as unsupported; behavior depends on unsupported_set_mode (proxy, error, or ignore).
  • ef62681: In-request-path shallow auto-caching now skips system schema, session variable, and non-deterministic queries typically issued during driver or ORM bootstrap, preventing cache pollution.
  • 8c173ed: Added a new UNTIL WRITE keyword to CREATE CACHE. Queries created with this option are served from cache until the current transaction observes a write, after which they are proxied upstream. Auto-created shallow caches in --query-caching=inrequestpath --cache-mode=shallow adopt this policy automatically, allowing client drivers that wrap each statement in implicit transactions (e.g., Supabase Python drivers, ORMs with autocommit disabled, JDBC defaults) to benefit without configuration changes.
  • 79b6194: Added a new --opportunistic-ryw-ms configuration option (also OPPORTUNISTIC_RYW_MS environment variable). When set, reads in a session bypass the cache for a specified number of milliseconds after a write in the same session, allowing upstream replication time to catch up. Applies only outside transactions; in-transaction routing remains governed by the per-cache TrxCachePolicy. This is a best-effort mechanism, not a consistency guarantee, and is disabled by default.
  • a0fa770: Parallelized RocksDB lookups for batched upqueries, reducing cold cache miss latency for large key batches.
  • 94034d5: Added hits, misses, and refreshes columns to the readyset.shallow_caches virtual relation, exposing per-cache metrics via SQL.
  • 4a00524: PostgreSQL SET TimeZone now accepts all UTC-equivalent zones rather than only the literal 'UTC'. Non-UTC values are handled according to unsupported_set_mode.
  • b971023: COM_CHANGE_USER authentication failures rejected by the shim now produce a debug log instead of failing silently. Credential mismatch logs now include the username and negotiated authentication plugin.
  • 115cd6c: Added the readyset.deep_caches virtual relation, which can be queried using arbitrary SQL to inspect current deep cache state.
  • c33db6f: Added an until_write column to the readyset.shallow_caches and readyset.deep_caches virtual relations.
  • 6601c39: Fixed a view correctness bug where a select-list alias that shadowed another column’s source name could return the wrong column's value.
  • 7d3e444: CREATE CACHE now accepts a WITH (option, ...) clause that groups cache options after the optional cache name, for example: CREATE CACHE my_cache WITH (POLICY TTL 5 SECONDS, ALWAYS) FROM .... Supported options are POLICY (with TTL/REFRESH), COALESCE, ALWAYS and UNTIL WRITE. The bare-keyword form, with options before the name, remains valid, but the two forms cannot be combined in a single statement.
  • c27c1d4: CREATE CACHE accepts a new TOPK_BUFFER_MULTIPLIER option (inside WITH (...) only) that sets how many extra rows the TopK operator buffers past the limit to avoid upstream replays on deletes. Defaults to the previous behavior of multiplier = 1; 0 disables buffering entirely.

Don't miss a new readyset release

NewReleases is sending notifications on new releases.