Models, sessions, RETURNING, optimistic locking: the code you already have runs as it is. A conformance suite runs real frameworks in Python, Go, Rust and Node against K3, so it keeps working.
K3 Tables is where your data lives, not a copy you analyze later. The guarantees are the ones you’d expect from the database your money runs on.
A write returns only once it is on a replicated log in object storage.
BEGIN…COMMIT lands every statement together as one write, with savepoints when you need them.
Two writers on one row resolve to exactly one winner. The other gets SQLSTATE 40001 and retries.
DECIMAL to 38 digits, real UUIDs, enforced VARCHAR(n) and comparison CHECKs. Bad data is refused with a real SQLSTATE, never trimmed.
SQL reads always include your own writes, including inside an open transaction.
PRIMARY KEY, UNIQUE, CHECK and FOREIGN KEY on insert, plus SELECT … FOR UPDATE and savepoints.
p50 server time per statement, one client, same machine. K3 0.2.4 against CockroachDB v24 with three replicas. Every K3 write is on a replicated quorum log before it is acknowledged. October 2026 benchmark.
No nightly export, no warehouse to load, no second copy that is always a little behind. Aggregations, joins, subqueries and CTEs run straight on the tables your app writes to, and any BI tool that speaks Postgres can read them.
WITH recent AS ( SELECT * FROM orders WHERE placed > now() - INTERVAL '1 day' ) SELECT c.segment, count(*) AS orders, avg(r.amount) AS basket FROM recent r JOIN customers c ON c.id = r.customer GROUP BY c.segment;
RESTORE TABLE orders TO TIMESTAMP AS OF '2026-10-29T14:00:00Z';
Every table keeps at least seven days of history. Restore it to a version or a timestamp in one statement. The restore is itself a version, so you can always move forward again.
Refused, with the alternative named: CREATE TABLE AS, an identity column, or a pipeline.
A bare UPDATE or DELETE is refused so nobody wipes a table by accident. Write WHERE TRUE when you mean it.
COPY FROM works today. COPY TO and pg_dump are not served yet.
Compact, optimize and vacuum a table from the CLI or the console. Reads are correct before and after.
Create a bucket, copy the connection string, run your migrations. Free to start, no card.