在Windows上执行R中的PSQL

Executing PSQL in R on Windows

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

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

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

1
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
包含在系统和用户变量中。


您的命令存在一些问题。

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

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

1
2
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驱动程序,这是一种更简单,独立于平台的方式来完成您的任务?

1
2
3
4
5
6
7
8
9
# 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')