Какой тип столбца PostgreSQL следует использовать для хранения Java BigDecimal?
Какой тип столбца PostgreSQL следует использовать для хранения Java BigDecimal?
Ответы (3)
См. типы данных PostgreSQL — возможно, Numeric, который может действовать как тип произвольной точности (это расширение Postgres Pro).
... без какой-либо точности или масштаба создает столбец, в котором могут храниться числовые значения любой точности и масштаба, вплоть до предела точности реализации.
Однако я не совсем уверен, что такое «ограничение реализации по точности». Никогда не пробовал действительно большие числа. Если предел достигнут, то возможен откат к text
. Но я подозреваю, что до этого будут другие серьезные проблемы ;-) Если вы хотите хранить меньше, укажите точность и/или масштаб до numeric
.
Изменить, как указал sjr, ограничение составляет 1000 десятичных цифр точности (из той же ссылки):
Тип numeric может хранить числа с точностью до 1000 цифр [в текущих реализациях] и точно выполнять вычисления. Особенно рекомендуется для хранения денежных сумм и других величин, где требуется точность...
Если требуется более высокая точность, несмотря на наличие гораздо более серьезной проблемы, то числовой столбец не подойдет (сам по себе). Но на самом деле это скорее очень крайнее "что, если" и, вероятно, не играет ограничивающей роли.
Просто используйте сопоставления Java для общих типов данных SQL. В этом случае вы можете использовать NUMERIC или DECIMAL.
Я бы использовал decimal
, добавив свою собственную шкалу и точность:
t.decimal "price", precision: 12, scale: 4, default: "0.0"