我一直在尝试从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 包括在系统和用户变量中。
答案 0 :(得分:2)
您的命令存在一些问题。
system
不能与重定向一起使用,您必须使用shell
&
运算符,而不是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')