在 Windows 上的 R 中执行 PSQL
Posted
技术标签:
【中文标题】在 Windows 上的 R 中执行 PSQL【英文标题】:Executing PSQL in R on Windows 【发布时间】:2014-02-24 01:59:20 【问题描述】:我一直在尝试从 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 包含在系统变量和用户变量中。
【问题讨论】:
我为我的问题简化了粘贴中的字符串,因此使用带有一个字符串的粘贴可能看起来很奇怪。export
不是 Windows 上的命令。你可能想要set
。
您也可以使用the pgpass file设置密码[postgres
或其他用户]。这可以是set up with pgAdmin。 More here.
请注意,您的 pgAdmin 是古老的。
@nograpes 当 db 版本是 8.2.15 时,不会认为 pgAdmin 版本很重要。对于旧版本,最新版本会更有效吗?
【参考方案1】:
您的命令存在一些问题。
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')
【讨论】:
是的,我考虑过 RPostgresql 并使用了 PivotalR,因为 greenplum 是建立在关键之上的。我尝试这种方法的原因是将数据推送到表中。出于安全原因,存在某些限制。这个过程我有一个 30 分钟的窗口。我听说 psql 是执行此操作的首选方法。只需要一个好的测试用例来进行基准测试。 嗯,听起来你这样做是有充分理由的。您是否尝试过我提供的命令cmd
?效果是否符合您的预期?
如果你想将数据写入数据库,RPostgreSQL 也为此提供了一个dbWriteTable
函数。
shell 执行工作完美,直到: > C:/temp_data/db_test.dat 这行似乎没有任何效果或执行。结果将发布到控制台。 shell 的输出是否需要特殊的方法来保存到文件或一般的 R 环境?
@dotcomken 重定向在我的机器上有效。我想我知道发生了什么:将cmd<-...
放在一行上,看来R 正在解析\n
s 并将它们传递给shell
,这是行不通的。以上是关于在 Windows 上的 R 中执行 PSQL的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 7 64 上的 R studio 版本 0.99.489 中运行库(httr)时出错
无法在 Windows 10 上的 R 中加载 statnet