从这个问题和随后的答案开始:
Appropriate values for -Infinity & Infinity in Postgres
以及documentation,显然real
和double 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';