1

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

最困难的部分是在 R 中执行 system 后没有收到任何输出。我尝试了一些与查看 ?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 包含在系统和用户变量中。

4

1 回答 1

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')
于 2014-02-24T05:46:53.083 回答