如何通过RPostgreSQL执行sql查询文件

时间:2014-11-26 23:43:01

标签: sql r postgresql rpostgresql

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

如何在R?

中发送/执行sql查询文件作为语句

正常的方式

\i query.sql

似乎无法通过dbSendQuery发挥作用。 我尝试通过readLines将整个sql文件作为字符向量读取,但是这也失败了,因为dbSendQuery显然只支持一个命令?

1 个答案:

答案 0 :(得分:2)

dbSendQuerydbGetQuery仅适用于" SQL"部分,而不是像\i这样的psql命令 在您的情况下,最简单的确是使用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