Release Notes
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
-
0ee831f: Fixed handling of empty array literals (
{}) in PostgreSQL queries that previously caused type mismatch errors. -
f89952f:
EXPLAIN MATERIALIZATIONSnow supports the optionalFOR CACHE <name>suffix to show only the materialized nodes belonging to a specific cache’s dataflow. -
f0fe3f4: Readyset now creates shallow caches by default in response to
CREATE CACHEstatements, allowing users to start caching queries without first setting up replication.- If replication is configured, start Readyset with
--cache-mode deepor--cache-mode deep-then-shallowto enable deep caching (CACHE_MODEenvironment variable). - You can request a specific cache type using the
CREATE [DEEP|SHALLOW] CACHEsyntax.
- If replication is configured, start Readyset with
-
d37510d: Added support for the PostgreSQL array overlap operator (
&&), which checks whether two arrays share any common elements. -
6924e75: Fixed an issue where filters on
ROW_NUMBER()results were lost in nested subqueries with identically named window output columns, causing too many rows to be returned. -
f4e59d1: Fixed a race condition between the WAL flushing thread and the full replay thread.
-
3867c09: Fixed an out-of-memory issue during replays for queries with fully materialized nodes.
-
d4c33ed: Fixed incorrect results for
LEFT JOINs withON-clause conditions referencing only the left table. -
83767d8: Fixed a crash in domain processing when
SUMorAVGaggregates were applied to text columns in MySQL mode. -
ce07ae1: Fixed
AVG()decimal precision for integer columns in MySQL. -
8f37261: Added support for auto-incrementing columns in PostgreSQL via the
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITYsyntax. -
fb31b80: Fixed a panic when
json_object_aggwas used in queries requiring post-lookup aggregation (e.g., withWHERE INclauses). These queries now gracefully fall back to the upstream database. -
4932860: Improved performance of PostgreSQL array containment operators (
@>and<@) from O(n*m) to O(n+m). -
9bed07a: Fixed incorrect
NULLordering in PostgreSQL array comparisons.NULLelements are now correctly treated as greater than non-NULLvalues, matching PostgreSQL semantics. -
4bfec7c: Fixed a bug where
GROUP BYwith numeric column references (e.g.,GROUP BY 1) failed inside subqueries. -
0e2d46d: Fixed a bug causing column lookup errors during MIR lowering for queries with aggregates inside derived tables (e.g.,
SELECT * FROM (SELECT max(id), val FROM t GROUP BY 2) AS sub). -
a8a6425:
SHOW PROXIED QUERIESnow defaults to displaying proxied queries and their Readyset support status based on the current--cache-modesetting (default: shallow).- You can specify a list using the
DEEPorSHALLOWmodifier, e.g.,SHOW PROXIED [DEEP|SHALLOW] QUERIES.
- You can specify a list using the
-
8fb0958: Fixed
array_aggon array-typed columns (e.g.,ARRAY(SELECT ARRAY[...])), which previously returnedUnsupported typeerrors. It now produces multidimensional arrays matching PostgreSQL behavior. -
b5bf630: Fixed incorrect results for
LEFT JOIN+ subquery queries with parameterizedWHEREclauses on a right-side non-join column. -
7033df7: Added support for
VALUESclauses in theFROMposition withJOINs, enabling inline literal tables (e.g.,SELECT ... FROM (VALUES (1, 'a')) AS v(id, name) JOIN t ON ...). -
42bca2b: Fixed a domain thread crash when caching queries with type-mismatched join conditions (e.g.,
INTjoined againstgroup_concatTEXToutput that cannot convert toINT). -
4689a72: Fixed equality comparison bugs with
TIMESTAMPand non-UTCTIMESTAMPTZcached lookups. Persistent state will be automatically re-snapshotted on upgrade. -
968d819: Fixed incorrect results for
TIMESTAMPqueries with timezone offsets in literals. -
3965615: Fixed MySQL
DATETIMElookups with timezone offsets inWHEREclauses. -
f0617bf: Fixed connection tracking to properly handle multiple authenticated users from the same IP address and re-authentication cases.
SHOW CONNECTIONSnow displays both remote addresses and usernames. -
31a08d9: Added a virtual Readyset schema backed by DataFusion, exposing more system state via SQL and virtual relations.
- The default schema name is
readyset, configurable via the--readyset-schemaflag or theREADYSET_SCHEMAenvironment variable.
- The default schema name is
-
7d4e2e4: Added
readyset.shallow_cachesvirtual relation (vrel) to examine current shallow caches. -
a77c177: Added
readyset.shallow_cache_entriesvrel to assist in diagnosing shallow cache entries. -
8b668c3: Fixed duplicate column projection handling to prevent debug assertion panics when queries select the same column multiple times.
-
369f17f: Added the
SKIP CACHEhint (/*+ SKIP CACHE */) to bypass Readyset caches and route queries directly to the upstream database. -
d83cf2f: Added a reason tag to the skip cache metric to distinguish between
SKIP CACHEhints, transactions, and proxy-always bypass scenarios.- Thank you to @Daksh-10 for the contribution!
-
Readyset now supports MySQL Global Transaction Identifiers (GTIDs) for binlog replication. When the upstream MySQL server has GTID mode enabled, Readyset automatically detects and uses GTID-based positioning instead of traditional binlog file/position tracking. This provides:
- Automatic GTID detection: Readyset queries the upstream server's gtid_mode variable and switches to GTID-based replication automatically when available.
--require-gtidflag: Optionally enforce GTID mode, preventing fallback to binlog file/position if the upstream server has GTIDs disabled.
-
Readyset now supports switching the upstream database source without a full re-snapshot, enabling planned failover scenarios (e.g., promoting a replica or migrating to a new host). Four new SQL commands are available:
ALTER READYSET STOP REPLICATION: Pauses the replication stream.ALTER READYSET START REPLICATION: Resumes replication from the last stored position.ALTER READYSET SET REPLICATION POSITION '<pos>': Updates the stored replication position (accepts MySQL binlog file:position, GTID set, or PostgreSQL LSN format).ALTER READYSET CHANGE CDC TO '<url>': Points Readyset at a new upstream database URL.
A typical failover workflow: stop replication, change the CDC URL to the new source, optionally adjust the replication position, then start replication. This works for both MySQL (binlog file/pos and GTID) and PostgreSQL (LSN) deployments.
-
Added query hint syntax (
/*rs+ ... */) for inline cache management.CREATE SHALLOW CACHEhints create a shallow cache on first execution while still executing the query. It also allows for optional settings such asTTLandCOALESCE.