2013-10-03 43 views
1

我需要处理的,我想大int,主键值1380742793415240。 在R我可以很容易地调整选项(scipen = 100),但我需要将这些数据存储在postgres数据库中。 我已经尝试dbWriteTable默认(双精度)的结果:违反常量(可能重复键在... 4e + 015表示),并且在将目标列更改为bigint后,结果为:invalid input syntax for integer: "1.38074279341524e+015"R RpostgreSQL bigint数据类型

例如:尽量保存和分贝以下DT

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

什么是有效的方式负载保存和载入这种Postgres里的数据?

+0

另存为角色? (这是'选项',我想知道'options(scipen = 100)'是否真的在按照你的想法进行操作。).Machine $ integer.max <1380742793415240 [1] TRUE' –

+0

使用字符字段我无法有效地查询'sql < - paste0(“select * from tbl where b> ='”,one_id,“'”)。不是所有的ID都以138 ...开头,为了处理这种情况,我需要用零填充前导空格以使所有字符串都是相同的nchar。是不是有更好的解决方案来存储数字,如'212982,1380742793415240'作为主键列,并使用'>'操作符有效地查询它们? – jangorecki

+0

我真的不知道。我知道你提出的密钥不适合R的整数模式的约束。 –

回答

2

对象正以及讨论和解决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 
相关问题