Skip to content
All releases

OriginChainDB / Release notes

Release notes · 27 September – 3 October 2026

Migrate is here: bring a PostgreSQL, MySQL, CockroachDB, SQL Server or MongoDB database, or data files, into a dedicated database, and check your data first. Also: all-or-nothing SQL requests, more PostgreSQL functions, role-aware console controls and public pricing.

Published
Period covered
27 September–3 October 2026
In this release
8 highlights 4 product areas
In this release 8 highlights
The release in focus 64 sec
A 64-second overview of this release. Background music, no narration; every update is described in full on this page.

What’s new

8 highlights
Migrate

Migrate: bring your database to OriginChainDB

On dedicated configurations, Migrate moves an existing database or data files into OriginChainDB from the console. Sources: PostgreSQL, MySQL and MariaDB, CockroachDB, SQL Server, MongoDB, and CSV, TSV or JSON files in cloud object storage. Migrate proposes the plan for you: exact column types, keys kept, foreign keys turned into graph links and full-text search suggested on long text. Every value arrives exactly or is refused with its row and column named, and each move shows live progress, can be resumed or cancelled, and is verified with row counts and sampled values per table.

Dedicated configurations only. Each move is a one-time copy, and your source's data is never changed.

Migrate

Check your data before you move it

Check data reads every planned table before a move, writes nothing, and lists every value that would be refused, all at once. During a move, a row that cannot be moved is set aside with its reason while the rest of the table moves. Once you have fixed those rows at the source, one click moves them again; it adds rows and never overwrites them.

Set-aside rows move again only when you press the button; nothing retries by itself.

Database

Multi-statement SQL requests are all-or-nothing

A request with several SQL statements now runs as one transaction, as PostgreSQL runs a multi-statement query: if every statement succeeds they are committed together, and if one fails nothing the request wrote is committed. A BEGIN … COMMIT or ROLLBACK inside a request now works as one transaction, and a BEGIN partway through includes the statements before it. Inside a SQL transaction, every statement sees the transaction's own earlier writes, including subqueries, upserts and MERGE. Cancelling a request stops its remaining statements, and a SHOW no longer swallows the statements after it.

SQL

                      BEGIN; DELETE FROM t; ROLLBACK
                    

Schema changes still apply at once: a CREATE, ALTER, DROP, TRUNCATE, GRANT or REVOKE after a write first commits the request's earlier writes, and the answer says which statements were committed. An application that sent BEGIN without a session and relied on its writes being committed anyway now needs a COMMIT. Multi-server databases keep running a request's statements one at a time.

Database

NULLs, upserts and READ ONLY match PostgreSQL

UPDATE … SET column = NULL now stores NULL, also on a column that has a default value. INSERT … ON CONFLICT into a table whose primary key is generated or defaulted, such as DEFAULT gen_random_uuid(), gives each row its own key, and repeating a key in one upsert behaves as in PostgreSQL. Foreign keys are checked against the row as it will be stored, after defaults and type conversion. On PostgreSQL connections, a write inside a READ ONLY transaction is refused with PostgreSQL's error, and COMMIT AND CHAIN and ROLLBACK AND CHAIN open the next transaction as PostgreSQL does.

SQL

                      UPDATE t SET updated_at = NULL
                    

In a READ ONLY transaction, nextval() and functions that write, called from a SELECT, still write; PostgreSQL refuses them. An ON CONFLICT DO UPDATE that changes a column a generated primary key is computed from is refused with a clear message. On the SQL API, COMMIT AND CHAIN and ROLLBACK AND CHAIN are refused.

Database

More PostgreSQL functions and commands

New functions: format(), to_char() and to_number(), pg_input_is_valid(), regexp_like, regexp_count, regexp_instr, regexp_substr and regexp_replace, and width_bucket(). VACUUM and ANALYZE are accepted and check that the table exists, so scripts and tools that run them no longer fail; OriginChainDB manages storage itself. LIKE and ILIKE accept an ESCAPE clause, EXTRACT supports century, millennium, decade, isoyear, week, isodow and julian for dates, and ON DELETE SET NULL and SET DEFAULT behave as in PostgreSQL. ORDER BY … LIMIT on a table too large for one query's memory now answers instead of failing with "result too large".

SQL

                      'a_c' LIKE 'a!_c' ESCAPE '!'
                    

LIKE now treats a backslash as its default escape character, as PostgreSQL does: a stored pattern that relied on a backslash matching itself must double it or add ESCAPE ''. The ORDER BY … LIMIT change does not yet apply inside an explicit transaction, to SELECT DISTINCT … ORDER BY … LIMIT, or when the select list computes a value.

Console

Console controls follow your role

Buttons you are not allowed to use are now disabled, with the reason, including for custom roles, deleting tables, importing and indexes. A database that is waking up shows as waking, and the Data Explorer and the Workbench wait for it instead of failing. States are clearer: a declined order reads "Declined", an expired approval request ends the wait, and a stalled database change offers Resume. An account with no organization yet gets a clear next step instead of an error.

Rotating a key while the instance is stopping or being resized is refused with a clear message; rotate it once the instance is running.

Database

Date ranges written the PostgreSQL way

Filters such as DATE '1995-01-01' + INTERVAL '1 year' now work, and months and years are added as PostgreSQL adds them: January 31 plus one month is February 29 in a leap year. INTERVAL '3' MONTH, INTERVAL '1 year 2 months' and - INTERVAL '90' DAY work wherever a date is compared: filters, CASE WHEN conditions and join filters. Comparing a DATE column with ADD_MONTHS(), date_trunc(), LAST_DAY(), DATEADD() or another date minus an interval now returns the same rows as PostgreSQL.

SQL

                      SELECT COUNT(*) FROM orders WHERE o_orderdate >= DATE '1995-01-01' AND o_orderdate < DATE '1995-01-01' + INTERVAL '1 year';
                    

Calendar intervals work in comparisons only for now: SELECT d + INTERVAL '1 month' as an output column returns a clear "not supported" message. Aggregates over joins that compare a DATE with ADD_MONTHS() and similar functions are not covered yet.

Billing

Public pricing and a refund policy

The pricing page now shows the two configurations you can buy in the console today, at $29 and $49 a month, with buttons that lead straight to the console. A new Cancellation & Refund Policy page, linked from the site footer, explains billing, cancelling, refunds and missed card payments. You can cancel at any time by deleting the database in the console, which also cancels its subscription; deleting is permanent, so export any data you need first.

The $29 and $49 configurations share compute on a single node, with no high availability, replicas or point-in-time recovery.

Also in this release

  • Migrate: add your own full-text search fields and graph relationships to the plan before you move (dedicated configurations).
  • Team invitations: every invitation link now opens the console’s invitation page.
  • Demo workspace: try the demo, then sign in to your own workspace in one click.
  • Website: a redesigned Newsroom for OriginChainDB announcements and product updates, and a new Careers page where you can register interest.
  • Webhooks into tables with foreign keys: a delivery whose row points to a parent that does not exist yet is refused with a retryable 503 and Retry-After, and nothing from it is stored.