0

我需要在 PostgresSQL 中导入一个 10.352.223 KB 的数据库。我试图通过 R 中的 RPostgreSQL 库来做到这一点,但我遇到了问题。

我的代码是:

i<-10000

for(a in seq(0,36000000, i)){
  data<-read.table("data.txt",sep="|",dec=",",
                     nrows=i,skip=a,fill=T,
                     colClasses=c(rep("NULL",2),"character",rep("NULL",64),
                                  rep("character",2),rep("NULL",11),
                                  "numeric",rep("NULL",9),"numeric",
                                  rep("NULL",2)))
  colnames(data)<-names
  data$iteration<-rep(a,dim(data)[1])
  dbWriteTable(con,"data",data, append=TRUE )
  print(paste("registry", a, sep = " "))
}

在注册 469000 之前我没有问题,但在某些时候我有这个错误:

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
could not allocate memory (2048 Mb) in C function 'R_AllocStringBuffer'

如果我跳过很多行并阅读一些特定的行,我无法理解有什么问题。

我能做些什么?我必须直接使用 PosgreSQL 代码吗?R中有更好的方法吗?

我会很感激你的帮助。

4

1 回答 1

0

如果可以的话,您可能想使用psql它。它具有RPostgreSQL包可能缺少的批量插入功能。

您仍然可以使用该包执行命令来创建表等 pp。

当然,您也可以使用包先插入一些 N 行,然后再追加 N 行,直到达到总行数。

于 2016-10-26T19:45:12.403 回答