Integers, numeric, floating point |
smallint, integer, and bigint become NUMBER(5), NUMBER(10), and NUMBER(19). numeric(p,s) becomes NUMBER(p,s); real and double precision become BINARY_FLOAT and BINARY_DOUBLE. |
Every digit is kept, including the full bigint range. |
serial, identity, defaults |
On Oracle 12c and later, an identity column, GENERATED BY DEFAULT, keeping the copied values; on 11g the key stays a plain NUMBER. now() becomes SYSTIMESTAMP; constant defaults are kept. |
New rows get keys above the copied ones. Function defaults such as gen_random_uuid() are dropped rather than written as text; set them in Oracle if needed. |
varchar, char, text |
varchar(n) becomes VARCHAR2(n CHAR), unbounded varchar VARCHAR2(4000 CHAR), char(n) CHAR(n CHAR), and text CLOB. |
Oracle stores an empty string as NULL. An empty string in a NOT NULL column is written as a single NUL character so the row still loads; check code that tests for ''. |
boolean |
NUMBER(1), with true as 1, including a DEFAULT true. |
The application reads 1 and 0 instead of a boolean. |
date, timestamp, timestamptz, time |
DATE, TIMESTAMP(6), and TIMESTAMP(6) WITH TIME ZONE. A time becomes a DATE holding the time of day on 1 January of year 1. |
Oracle has no time-only type. Read the time part of that DATE in queries. |
json, jsonb, arrays, uuid, interval |
JSON and arrays become CLOB holding their text. A uuid becomes VARCHAR2(36 CHAR) and an interval VARCHAR2(100 CHAR). |
The values arrive as text. Queries that used PostgreSQL JSON or array operators need rewriting. |
bytea |
BLOB. |
Binary values arrive byte for byte. |