我使用RPostgreSQL
包通过R访问我的PostgreSQL数据库(9.3)。
我有一些很长很大的SQL查询(几个MB大的。从raster2pgsql生成)。
如何在R?
中发送/执行sql查询文件作为语句正常的方式
\i query.sql
似乎无法通过dbSendQuery
发挥作用。
我尝试通过readLines
将整个sql文件作为字符向量读取,但是这也失败了,因为dbSendQuery显然只支持一个命令?
答案 0 :(得分:2)
dbSendQuery
或dbGetQuery
仅适用于" 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