2014-11-26 3 views
4

Я получаю доступ к моей базе данных PostgreSQL (9.3) через R, используя пакет RPostgreSQL. У меня есть несколько очень длинных и больших sql-запросов (несколько мегабайт большой, созданных из raster2pgsql).Как выполнить файлы запросов sql через RPostgreSQL

Как я могу отправить/выполнить sql-файлы запроса как оператор в R?

Обычный способ

\i query.sql 

не похоже на работу с помощью dbSendQuery. Я попытался прочитать весь файл sql как вектор символов через readLines, однако это также не удается, потому что dbSendQuery поддерживает только одну команду, по-видимому?

ответ

2

dbSendQuery или dbGetQuery предназначен для части «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 
+0

Ahh , «sapply» отсутствовал. Благодаря! – Curlew

+0

Обнаружено, что иногда мне также нужен вызов 'dbClearResult'. Таким образом: 'sapply (query, function (x) res <- dbSendQuery (con, x); dbClearResult (res)' – Curlew

+1

В этом случае вам понадобятся фигурные скобки, хотя 'sapply (query, function (x) {res < - dbSendQuery (con, x); dbClearResult (res)}) ' – plannapus

 Смежные вопросы

  • Нет связанных вопросов^_^