问题描述
我正在使用 RPostgreSQL
包通过R访问我的PostgreSQL数据库(9.3)。
我有一些非常长且很大的sql查询(从raster2pgsql生成几个MB。)。
I am accessing my PostgreSQL database (9.3) via R using the RPostgreSQL
package.I have a few very long and big sql queries (several MB big. generated from raster2pgsql).
如何发送/执行sql查询文件是否作为R中的语句?
正常方式
\i query.sql
似乎无法通过 dbSendQuery工作
。
我试图通过 readLines
作为字符向量读取整个sql文件,但是这也失败了,因为dbSendQuery显然仅支持单个命令?
does not seem to work via dbSendQuery
.I tried to read in the whole sql file as character vector via readLines
, however this also fails, because dbSendQuery only supports a single command apparently?
推荐答案
dbSendQuery
或 dbGetQuery
仅用于 SQL部分,而不是psql命令,例如 \i
。
在您的情况下,实际上最简单的方法是使用 readLines
,然后在 sapply
调用中包装 dbGetQuery
。
dbSendQuery
or dbGetQuery
is just for the "SQL" part, not the psql commands such as \i
.
In your case the simplest is indeed to use readLines
but then wrap dbGetQuery
in a sapply
call.
con <- dbConnect(...) #Fill this as usual
queries <- readLines("query.sql")
sapply(queries, function(x) dbGetQuery(con,x))
dbDisconnect(con)
由于我经常使用它,因此在我的 .Rprofile
文件中有一个快捷方式:
Since I use this very often, I have a shortcut for this in my .Rprofile
file:
dbGetQueries<-function(con,queries)sapply(queries,function(x)dbGetQuery(con,x))
当然,您也可以使用 s ystem
方式:
Of course, you can also go the system
way:
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
这篇关于如何通过RPostgreSQL执行SQL查询文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!