2014-01-12 3 views
0

column_with_very_big_numerics является numeric(30,0)PSQL: Тип принуждение для больших числовых значений

SELECT 
    column_with_very_big_numerics 
FROM some_table 

Я использую pg Node.js клиента. Я бы вернул результат как числовое. Потому что это число настолько велико, что я не могу использовать int, например.

SELECT 
    column_with_very_big_numerics::int, 
FROM some_table 

Это выведет ошибку, поскольку она находится за пределами допустимого диапазона. Есть ли способ обойти это? Каков максимальный номер, который PostgreSQL и клиент pg node.js могут вернуться?

ответ

2

Если вы хотите, чтобы column_with_very_big_numerics пришел к вам как NUMERIC, не отбрасывайте его до int.

Вы писали:

SELECT 
    column_with_very_big_numerics::int 
FROM some_table; 

Вместо этого, просто написать:

SELECT 
    column_with_very_big_numerics 
FROM some_table; 

The largest integer (and largest bigint) PostgreSQL can represent is in the documentation. Эти ограничения не относятся к numeric, так как это другой тип.

Ваша клиентская библиотека должна понимать, как бороться с numeric; иначе вы, вероятно, просто получите номер в виде строки. Вероятно, вам нужно найти произвольную точность десятичной плавающей запятой, чтобы работать с этими числами, если ваш язык программирования не поддерживает их изначально. Например. в Java вы используете BigDecimal, встроенный тип; в Python вы используете модуль decimal Python (автоматически поддерживается psycopg2, IIRC) и т. д. Я не использую Node.js, который звучит так, как будто вы используете, поэтому я не могу вам помочь.

Если pg драйвер Node.js игровая не справляется с numeric то либо (а) написать патч, чтобы исправить это, или (б) изменить схему, чтобы избежать numeric, используя bigint и (в случае необходимости для не целых) множители с фиксированной запятой.

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