PostgreSQL 数字类型是否支持无穷大(和 -infinity)?
Does PostgreSQL numeric type support infinity (and -infinity)?
根据这个问题和随后的回答:
Appropriate values for -Infinity & Infinity in Postgres
和documentation,很明显real
和double precision
数字类型支持正无穷大和负无穷大。但是,除了 range
有 "no limit" 之外,没有提到 numeric
类型。
numeric
类型是否支持正无穷大和负无穷大(在 PostgreSQL 9.5 中),如果支持,如何插入此类值?
编辑(如@TimBiegeleisen 所建议):
出现这种情况的原因是因为我正在尝试将数字列从 R
写入数据库 table。该列包含 Inf
值,但使用 RPostgreSQL
中的 dbWriteTable
错误:
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
条件强加于数据库。我想另一件事是写一个任意大的数字。
浮点类型有以下特殊值:
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
,并在您的应用程序业务逻辑中处理这些值的填充和管理。
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';
PostgreSQL 将从 v14
开始支持数字 +inf/-inf
根据这个问题和随后的回答: Appropriate values for -Infinity & Infinity in Postgres
和documentation,很明显real
和double precision
数字类型支持正无穷大和负无穷大。但是,除了 range
有 "no limit" 之外,没有提到 numeric
类型。
numeric
类型是否支持正无穷大和负无穷大(在 PostgreSQL 9.5 中),如果支持,如何插入此类值?
编辑(如@TimBiegeleisen 所建议):
出现这种情况的原因是因为我正在尝试将数字列从 R
写入数据库 table。该列包含 Inf
值,但使用 RPostgreSQL
中的 dbWriteTable
错误:
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
条件强加于数据库。我想另一件事是写一个任意大的数字。
浮点类型有以下特殊值:
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
,并在您的应用程序业务逻辑中处理这些值的填充和管理。
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';
PostgreSQL 将从 v14
开始支持数字 +inf/-inf