继续这个问题和随后的答案: 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
,但是当列包含缺失值或{{1}时,这不起作用条件强加于数据库中。我想另一件事就是写一个任意大的数字。
答案 0 :(得分:6)
PostgreSQL 将从 v14 开始支持数字 +inf/-inf ?
答案 1 :(得分:3)
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';
答案 2 :(得分:1)
浮点类型具有以下特殊值:
Infinity
-Infinity
NaN
这可以追溯到v8.2,并且仍然是最新的。
(参考:https://www.postgresql.org/docs/9.6/static/datatype-numeric.html)
编辑:我可以看到您要解决的问题。来自数学背景,我可以看到为什么你可能需要例如整数值,包括正无穷大和负无穷大,以及NaN(对于渐近线,极限等)。不幸的是,PostgreSQL没有这些值可用于整数或小数类型。你可以通过两列来 来模拟它:"myNumeric" NUMERIC,
"myNumericSpecialInformation" REAL
然后在myNumericSpecialInformation
列中,如果没有特殊信息,则存储NULL
,或存储(根据要求)Infinity
,-Infinity
或NaN
,并在应用程序业务逻辑中处理这些值的填充和管理。