2

我需要处理,我想是 big int, primary key values 1380742793415240。在 RI 中可以轻松调整选项(scipen=100),但我需要将该数据存储在 postgres db 中。我已经尝试使用 dbWriteTable 默认(双精度)结果:违反约束(可能在 ...4e+015 表示中重复键),并且在将目标列更改为 bigint 后,结果: invalid input syntax for integer: "1.38074279341524e+015"

示例:尝试在 dt 之后从 db 保存和加载

sample_dt <- data.table(a = c(20130101,20130102,20130102), 
                        b = c(1380742793415240,1380742793415241,1380742793415242))

在 postgres 中保存和加载此类数据的有效方法是什么?

4

1 回答 1

3

该主题在 RpostgreSQL 邮件列表中得到了很好的讨论和解决,如果有人有同样的问题,请链接它:https
://groups.google.com/forum/#!topic/rpostgresql-dev/NDc7NfUP6M8 内容下方:

library(RPostgreSQL)
# Loading required package: DBI
c=dbConnect("PostgreSQL")
a <- 1380742793415240
b <- 1380742793415241
dc <-data.frame(a=as.character(a), b=as.character(b))
dbWriteTable(c,"testclosenumberch", dc)
# [1] TRUE
dbGetQuery(c, "select * from testclosenumberch")
#   row.names                a                b
# 1         1 1380742793415240 1380742793415241
dbGetQuery(c, "select a::bigint - b::bigint  from testclosenumberch")
#   ?column?
# 1       -1
于 2013-10-04T22:37:03.490 回答