PSQL:对大数字进行类型强制

时间:2014-01-12 18:57:54

标签: node.js postgresql

column_with_very_big_numericsnumeric(30,0)

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客户端可以返回的最大数字是什么?

1 个答案:

答案 0 :(得分:2)

如果您希望column_with_very_big_numericsNUMERIC的身份来找你,请不要将其投放到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中你使用Python的decimal模块(由psycopg2,IIRC自动支持)等。我不使用Node.js,听起来你正在使用它,所以我无法帮助你。

如果node.js的pg驱动程序无法处理numeric,则(a)编写修补程序以修复该问题,或者(b)更改模式以避免numeric,使用bigint和(非整数必要时)定点乘数。