Один из самых первых и распространенных вопросов в процессе миграции базы данных с Oracle на PostgreSQL — «Как типы данных Oracle сопоставимы с типами PostgreSQL?».

Простой ответ заключается в том, что они очень совместимы и легко сопоставляются. В приведенной ниже таблице показано сравнение и сопоставление типов данных Oracle с PostgreSQL для наиболее распространенных типов Oracle. Эти базовые типы данных лишь поверхностно демонстрируют то, что может сделать PostgreSQL, — она ??имеет очень богатую систему типов и поддерживает настраиваемые типы. В состав встроенных типов входят JSON, массивы, UUID, IP-адреса, геометрические типы, перечисления и многое другое.

Тип данных Oracle Тип данных PostgreSQL Комментарии
Char() Char()
Char(1) Char(1) Если используется в качестве булевого флага, то лучше использовать тип данных boolean
Varchar2() Varchar()
Timestamp Timestamptz Вообще, мы рекомендуем хранить timestamp в качестве timestamp с часовым поясом (timestamptz), что эквивалентно timestamp Oracle с местным часовым поясом. Таким образом сохраняются все значения в UTC, даже если сервер или клиент базы данных находятся в разных часовых поясах, что позволяет избежать множества проблем. Но, возможно, какой-то код приложения должен использовать типы, имеющие информацию о часовом поясе — если это важный момент, используйте timestamp без часового пояса, чтобы минимизировать изменения миграции.
Date Timestamptz PostgreSQL тип “Date” хранит только дату и не хранит время
Date Date
Number() Numeric() PostgreSQL Numeric похож на Oracle Number с переменной диапазоном и точностью, поэтому может использоваться для любых числовых полей, но иногда более предпочтительны целочисленные поля и числа с плавающей запятой.
Number(5,0) Integer Integer и Bigint работают лучше, чем Number (), когда используются для joinов больших таблиц, поэтому предпочтительнее сопоставление с Int для полей первичного и внешнего ключей, обычно используемых для joinов.
Number(10,0) Bigint
Number( ,2) Numeric( ,2) PostgreSQL Numeric (, 2) идеально подходит для денежных типов, поскольку он обладает конкретной точностью (если вы не имеете дело с йеной и не нуждаетесь в типе (, 0)). Тип «money» эквивалентен типу numeric по точности, но иногда вызывает неожиданности для приложений из-за неявных предположений о форматировании. Никогда не используйте представление с плавающей запятой (float / double) из-за потенциального округления во время арифметики.
CLOB Text Text намного проще в использовании, без функций LOB, просто рассматривайте его как символьное поле. Может хранить до 1 ГБ текста.
Long Text
BLOB Bytea
Long raw
Raw
XMLTYPE XML
UROWID OID Использование OID в Postgres не эквивалентно и не обеспечивает такое же преимущество в производительности, что и ROWID, используемое в Oracle.

Комментарии (5)