从这个问题和随后的答案开始:
Appropriate values for -Infinity & Infinity in Postgres

以及documentation,显然realdouble precision数字类型支持正负无穷。但是,没有提及 numeric 类型,只是 range 具有“无限制”。
numeric 类型(在 PostgreSQL 9.5 中)是否支持正无穷大和负无穷大,如果是,如何插入这些值?

编辑(如@TimBiegeleisen 所建议):
出现这种情况的原因是我试图将 R 中的数字列写入数据库表。该列包含 Inf 值,但使用来自 dbWriteTable 错误的 RPostgreSQL 与:

Error in postgresqlgetResult(new.con) :
  RS-DBI driver: (could not Retrieve the result :
ERROR:  invalid input syntax for type numeric: "Inf"

在我的特殊情况下,我可以将 Inf 转换为 NA 并将这些值写为 NULL ,但是当列包含缺失值或数据库中强加 not null 条件时,这不起作用。我想另一件事是写一个任意大的数字。

最佳答案

NUMERIC 不支持 +-infinity,但它支持 NaN。这是一个相当不幸的限制。解决它可能需要更改 numeric 的磁盘二进制格式,这可能具有挑战性......

craig=> SELECT NUMERIC 'NaN';
 numeric
---------
     NaN
(1 row)

craig=> SELECT NUMERIC '-inf';
ERROR:  invalid input syntax for type numeric: "-inf"
LINE 1: SELECT NUMERIC '-inf';
                       ^
craig=> SELECT NUMERIC '+inf';
ERROR:  invalid input syntax for type numeric: "+inf"
LINE 1: SELECT NUMERIC '+inf';

craig=> SELECT NUMERIC '+infinity';
ERROR:  invalid input syntax for type numeric: "+infinity"
LINE 1: SELECT NUMERIC '+infinity';
                       ^
craig=> SELECT NUMERIC 'infinity';
ERROR:  invalid input syntax for type numeric: "infinity"
LINE 1: SELECT NUMERIC 'infinity';
                       ^
craig=> SELECT NUMERIC '-infinity';
ERROR:  invalid input syntax for type numeric: "-infinity"
LINE 1: SELECT NUMERIC '-infinity';

10-04 23:22
查看更多