Sql

Postgresql numeric: PostgreSQL: Documentation: 15: 8.1. Numeric Types

Сопоставление типов данных Oracle с PostgreSQL / Хабр

the_unbridled_goose

Время на прочтение 2 мин

Количество просмотров

23K

Oracle *PostgreSQL *

Перевод

Автор оригинала: David Rader

Один из самых первых и распространенных вопросов в процессе миграции базы данных с 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.

Теги:

  • comparison
  • data type
  • oracle
  • postgresql

Хабы:

  • Oracle
  • PostgreSQL

EDB Docs — EDB Postgres Advanced Server v15

Числовые типы состоят из четырехбайтовых целых чисел, четырехбайтовых и восьмибайтовых чисел с плавающей запятой и десятичных дробей фиксированной точности. В следующей таблице перечислены доступные типы.

Целочисленные типы

Типы BINARY_INTEGER , INTEGER , PLS_INTEGER и ROWID хранят целые числа (без дробных частей), как указано в таблице числовых типов. Попытки сохранить значения за пределами допустимого диапазона приводят к ошибке.

Числа произвольной точности

Тип ЧИСЛО может хранить почти неограниченное количество цифр точности и точно выполнять вычисления. Мы особенно рекомендуем его для хранения денежных сумм и других величин, где требуется точность. Однако тип NUMBER очень медленный по сравнению с типами с плавающей запятой, описанными в разделе Типы с плавающей запятой.

Шкала числа ЧИСЛО — это количество десятичных цифр в дробной части справа от запятой. точность числа ЧИСЛО — это общее количество значащих цифр в целом числе, то есть количество цифр по обе стороны от десятичной точки. Таким образом, число 23,5141 имеет точность 6 и масштаб 4. Целые числа имеют нулевой масштаб.

Можно настроить как точность, так и масштаб типа ЧИСЛО . Чтобы объявить столбец типа ЧИСЛО , используйте синтаксис:

 ЧИСЛО(точность, масштаб) 

Точность должна быть положительной, а масштаб должен быть нулевым или положительным. В качестве альтернативы этот синтаксис выбирает масштаб 0:

 ЧИСЛО(точность) 

Указание ЧИСЛО без какой-либо точности или масштаба создает столбец, в котором можно хранить числовые значения любой точности и масштаба, вплоть до предела точности реализации. Столбец такого типа не приводит входные значения к какой-либо конкретной шкале, тогда как NUMBER столбцов с объявленной шкалой приводят входные значения к этой шкале. (Стандарт SQL требует масштаба по умолчанию, равного 0, то есть приведения к целочисленной точности. Для максимальной переносимости лучше указать точность и масштаб явно. )

Если точность или масштаб значения больше заявленной точности или масштаба столбца, система пытается округлить значение. Если значение невозможно округлить до заявленных пределов, возникает ошибка.

Типы с плавающей запятой

Типы данных REAL и DOUBLE PRECISION являются неточными числовыми типами переменной точности. На практике эти типы обычно являются реализациями стандарта IEEE 754 для двоичных арифметических операций с плавающей запятой (одинарной и двойной точности соответственно) в той мере, в какой это поддерживают базовый процессор, операционная система и компилятор.

Неточное значение означает, что некоторые значения не могут быть точно преобразованы во внутренний формат и сохраняются как приблизительные значения, поэтому сохранение и распечатка значения могут показать небольшие расхождения. Управление этими ошибками и то, как они распространяются при вычислениях, является предметом целой области математики и компьютерных наук и далее здесь не обсуждается, за исключением следующих пунктов:

  • Если вам требуется точное хранение и вычисления (например, денежные суммы), используйте 9Вместо этого введите НОМЕР 0007 .

  • Если вы хотите выполнять сложные вычисления с этими типами для чего-то важного, особенно если вы полагаетесь на определенное поведение в граничных случаях (бесконечность, потеря значимости), внимательно оцените реализацию.

  • Сравнение двух значений с плавающей запятой на равенство может работать не так, как ожидалось.

На большинстве платформ тип REAL имеет диапазон не менее 1E-37 от до 1E+37 с точностью не менее шести знаков после запятой. Тип DOUBLE PRECISION обычно имеет диапазон от 1E-307 до 1E+308 с точностью не менее 15 цифр. Слишком большие или слишком маленькие значения вызывают ошибку. Округление может произойти, если точность входного числа слишком высока. Слишком близкие к нулю числа, которые вы не можете представить как отличные от нуля, вызывают ошибку потери значимости.

EDB Postgres Advanced Server также поддерживает стандартные нотации SQL FLOAT и FLOAT(p) для указания неточных числовых типов. Здесь p указывает минимально допустимую точность двоичных цифр. EDB Postgres Advanced Server принимает значения от FLOAT(1) до FLOAT(24) при выборе типа REAL и от FLOAT(25) до FLOAT(53) при выборе DOUBLE PRECISION . Значения p вне допустимого диапазона рисуют ошибку. FLOAT без указания точности означает ДВОЙНАЯ ТОЧНОСТЬ .

  • На этой странице
  • Целочисленные типы
  • Числа произвольной точности
  • Типы с плавающей запятой

Типы данных PostgreSQL — NUMERIC и DECIMAL [Ispirer Migration Knowledge Base]

1

1 Версии : PostgreSQL 8.x и 7.x

PostgreSQL — ЦИФРОВОЙ
Синтаксис ЦИФРОВОЙ [ ( п[с] ) ]
Данные Числовые данные с фиксированной точкой
Параметры p — максимальное количество всех цифр (обе стороны от запятой), s — максимальное количество цифр после запятой
Диапазон -10 38 до 10 38 -1, 1 ⇐ p ⇐ 1000, 0 ⇐ s ⇐ p
По умолчанию р — 1000, с — 0
Обработка ошибок Если масштаб значения больше заявленного масштаба, он округляется до указанного количества дробных цифр
Специальные значения Разрешено специальное значение без учета регистра ‘NaN’ (не число)
Стандарты ANSI SQL

ДЕСЯТИЧНОЕ идентично ЦИФРОВОМУ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *