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, andreplication_batch_size. - c4d2ab3: Fixed
SET time_zonehandling 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 connectionmessage. - 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 to127.0.0.1:5433and[::1]:5433(IPv4 and IPv6 loopback).--addressnow accepts multiple values to bind to several interfaces. - 24e7114:
LATERAL COUNTqueries that reference the count inWHERE,HAVING,ORDER BY,GROUP BY, orJOIN ONclauses over single-relation filters are now correctly rewritten toCOALESCE(col, 0)afterLEFT JOINinlining, 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 CACHEnow 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-mcpstandalone 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 throughCREATE,SHOW,ALTER, andDROP 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 CACHEstatements. - 1189d2b: Fixed a silent
COM_CHANGE_USERauthentication failure that rejected valid credentials when the client (e.g., ProxySQL) reused the handshake-time authentication response instead of recomputing it after the server’sAUTH_SWITCH_REQUEST. - c40661c: Fixed a wire encoding mismatch where
AVGoverBIGINTin cached queries with range orWHERE INparameters returned a differentNUMERICscale than upstream PostgreSQL. - 03a3211: Fixed
AVG(x) OVER (...)onDECIMAL/NUMERICcolumns 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, andSHOW 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,TIMESTAMPandDATETIMEwire output is now emitted as unshifted UTC wall-clock time. This prevents mismatches with derived values such asEXTRACT(HOUR FROM ts), which are not converted from UTC. - 06ba0dc: Non-UTC
SET @@time_zoneis now marked as unsupported; behavior depends onunsupported_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 WRITEkeyword toCREATE 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=shallowadopt 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-msconfiguration option (alsoOPPORTUNISTIC_RYW_MSenvironment 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-cacheTrxCachePolicy. 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, andrefreshescolumns to thereadyset.shallow_cachesvirtual relation, exposing per-cache metrics via SQL. - 4a00524: PostgreSQL
SET TimeZonenow accepts all UTC-equivalent zones rather than only the literal'UTC'. Non-UTC values are handled according tounsupported_set_mode. - b971023:
COM_CHANGE_USERauthentication 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_cachesvirtual relation, which can be queried using arbitrary SQL to inspect current deep cache state. - c33db6f: Added an
until_writecolumn to thereadyset.shallow_cachesandreadyset.deep_cachesvirtual 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 CACHEnow accepts aWITH (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 arePOLICY(withTTL/REFRESH),COALESCE,ALWAYSandUNTIL 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 CACHEaccepts a newTOPK_BUFFER_MULTIPLIERoption (insideWITH (...)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.