我一直在尝试从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服务器不在本地。
我的回声%PATH%包括系统变量和用户变量中包含的C:\ Program Files(x86)\ pgAdmin III \ 1.12。
您的命令有一些问题。
system
不能与重定向一起使用,必须使用 shell
&
运算符,而不是;
Unix中的like。因此您的命令看起来像(将其包含在一行中似乎很有必要):
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')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句