5

我正在使用RPostgreSQL包通过 R 访问我的 PostgreSQL 数据库(9.3)。我有一些非常长且很大的 sql 查询(几个 MB 大。从 raster2pgsql 生成)。

如何在 R 中将 sql 查询文件作为语句发送/执行?

正常的方式

\i query.sql

似乎无法通过dbSendQuery. 我试图通过 读取整个 sql 文件作为字符向量readLines,但这也失败了,因为 dbSendQuery 显然只支持单个命令?

4

1 回答 1

5

dbSendQueryordbGetQuery仅用于“SQL”部分,而不是 psql 命令,例如\i.
在您的情况下,最简单的方法确实是使用readLines,然后再dbGetQuery进行sapply调用。

con <- dbConnect(...)          #Fill this as usual
queries <- readLines("query.sql")
sapply(queries, function(x) dbGetQuery(con,x))
dbDisconnect(con)

由于我经常使用它,因此我的.Rprofile文件中有一个快捷方式:

dbGetQueries<-function(con,queries)sapply(queries,function(x)dbGetQuery(con,x))

当然,你也可以走这system条路:

system("psql -U username -d database -h 127.0.0.1 -p 5432 -f query.sql") #Remember to use your actual username, database, host and port
于 2014-11-27T08:02:19.087 回答