What’s new
8 highlights 01 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.
02 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.
03 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.
04 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.
05 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.
06 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.
07 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.
08 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.