Error reference
Database errors, and what they actually mean
Every error here is one we hit while moving data between engines, and every fix is one we had to make work. Where DBShifts handles the error for you, the page says so and names the module that does it.
Oracle
ORA-32795
ORA-32795: cannot insert into a generated always as identity column
Oracle refuses explicit values for a GENERATED ALWAYS AS IDENTITY column. Why it breaks every data load that carries its own primary keys, and the one-word change that fixes it.
Cause and fix →ORA-03076
ORA-03076: unexpected item DEFAULT in a CREATE TABLE
Oracle wants DEFAULT before NOT NULL. MySQL accepts either order, so converted DDL fails on clause order alone — with an error that never mentions order.
Cause and fix →ORA-01790
ORA-01790 on a multi-row MERGE with bind variables
Oracle cannot infer a type for a bind variable inside a UNION ALL branch, so a batched MERGE fails on values that all look identical. Why batching causes it and single rows do not.
Cause and fix →ORA-02291
ORA-02291: parent key not found during a data load
A child row arrived before its parent. Why load order alone will not save you, and how deferred constraints turn an unsolvable ordering problem into a solved one.
Cause and fix →ORA-02292
ORA-02292: child record found when deleting
The mirror image of ORA-02291 — you deleted a parent that still has children. Common in CDC replication, where a delete can arrive before the child deletes that preceded it.
Cause and fix →ORA-00942
ORA-00942: table or view does not exist
Oracle's most-searched error, and usually not about a missing table at all — it is about privileges, schema qualification, or a DROP that has no IF EXISTS.
Cause and fix →ORA-01466
ORA-01466: table definition has changed
A flashback or as-of query crossed a DDL change, or the undo it needed has aged out. Why long-running CDC polls hit it and short ones do not.
Cause and fix →ORA-08181
ORA-08181: not a valid system change number
An SCN passed to a flashback query is out of range — usually a stale checkpoint, or an SCN carried between databases where it means nothing.
Cause and fix →CockroachDB
unknown function
CockroachDB: unknown function pg_total_relation_size()
CockroachDB speaks the Postgres wire protocol but does not implement every pg_catalog function. Why tools that introspect Postgres fail on the size query specifically.
Cause and fix →unimplemented
CockroachDB: session_replication_role is not supported
The standard Postgres trick for loading data with foreign keys disabled does not exist on CockroachDB. What to do instead, and why the usual workaround is unnecessary here.
Cause and fix →syntax error
CockroachDB: at or near "restart" syntax error on TRUNCATE
TRUNCATE ... RESTART IDENTITY CASCADE is valid Postgres and a syntax error on CockroachDB. The difference, and what to use instead.
Cause and fix →Why these ones
They are the errors that stop a migration rather than the ones that merely annoy you, and several of them — the CockroachDB entries especially — are barely documented anywhere else. They are grouped by the engine that raises the error, which is not always the engine you are migrating from.