在Windows上执行R中的PSQL

时间:2014-02-24 01:59:20

标签: windows r postgresql psql greenplum

我一直在尝试从RStudio中的R中的system()执行PSQL。我在PATH中设置了PSQL,可以从cmd行执行PSQL。我不能为我的生活找出从Windows内的R内执行psql的正确方法。我有一个从ubuntu环境提供的代码。我之前没有使用过system(),因此研究这个特定的问题是不成功的。

在R中执行系统后,最困难的部分是没有接收到任何输出。我已经尝试了一些不同的设置来查看?system。没有运气。

此代码应执行简单的sql语句并将输出传递给本地文件。最终,在应用程序中包含动态元素会更加强大。只是让基础工作似乎是最难的部分。

system(paste("export PGPASSWORD=db_password;psql -h db_host -d db_name -c 'copy(select * from large_table limit 1000) to stdout csv' > C:/temp_data/db_test.dat", sep=""))

我很好奇是否有人在R中使用PSQL工作的Windows环境。我的greenplum服务器不是本地的。

我的echo%PATH%包括C:\ Program Files(x86)\ pgAdmin III \ 1.12 包括在系统和用户变量中。

1 个答案:

答案 0 :(得分:2)

您的命令存在一些问题。

  • system不能与重定向一起使用,您必须使用shell
  • 您不能在Windows中使用单引号引用命令,必须使用双引号。
  • 要连接命令,请使用&运算符,而不是Unix中的;运算符。

所以你的命令看起来像(似乎有必要将它包含在一行中):

cmd<-'set PGPASSWORD=db_password& psql -h db_host -d db_name -c "copy(select * from large_table limit 1000) TO STDOUT CSV;" > C:/temp_data/db_test.dat'
shell(cmd)

但是,您是否考虑过使用RPostgresql驱动程序,这是一种更简单,独立于平台的方式来完成您的任务?

# Load up the driver
library(RPGsql)
drv <- dbDriver("PostgreSQL")
# Create a connection
con <- dbConnect(drv, dbname="db_name", host='db_host',password='db_password',user='db_user')
# Query the database
db_test=dbGetQuery(con, 'select * from large_table limit 1000')
# Write your file
write.csv(db_test,'C:/temp_data/db_test.dat')