2015-03-25 3 views
0

У нас есть приложение, которое пытается вставить массовую вставку в таблицу в postgresql (9.1, я думаю, у меня нет доступа, помогающего удаленному решению коллеги). Трассировка показывает, что исходные значения генерируются правильно и правильно переданы в ODBC.Числовые артефакты округления с точностью до PostgreSQL

Проблема возникает с столбцом, который определен как NUMERIC, но не имеет определенного масштаба или точности. Кажется, что есть «случайные» закругленные артефакты. Иногда округляется, иногда вниз, без отношения к числу десятичных знаков. Это видно, когда запрашиваются значения из объемной вставки.

Я знаю, что это может вызвать проблемы со строками, но не уверен, имеет ли значение числовые типы данных. База данных кодируется окнами 1252, и они используют драйвер postgresql Unicode. Наконец, только некоторые FYI его на 32-битной Windows VM с тем, что похоже на параметры config_file по умолчанию.

Вопрос в том, что было бы/могло бы быть причиной этого?

Заранее спасибо.

ответ

2

Тип numeric is an arbitrary precision data type данных, а не тип с плавающей точкой, как float8 (double precision) или float4 (real). I.e., он хранит десятичные цифры, которые передаются ему без какого-либо округления. Номера воспроизводятся одинаково. Только точный формат может зависеть от вашего языка или настроек промежуточного программного обеспечения и клиента.

Тот факт, что точность и масштаб не позволяет установить numeric столбец сделать это с почти без ограничений.

1 Per documentaion:

до 131072 цифр перед десятичной точкой; до 16383 цифр после десятичной точки.

Суть его: вы можете исключить тип данных Postgres numeric как источник эффекта округления. Я не знаю об остальном, тем более, что вы не указали точные номера версий, демо-значения или воспроизводимый тестовый пример.
Мой снимок в темноте будет заключаться в том, что ODBC может обрабатывать число как тип с плавающей точкой. Может быть, устаревшая версия?

Смежные вопросы