R使用.pgpass中断PostgreSQL身份验证

R使用.pgpass中断PostgreSQL身份验证,r,postgresql,shiny,rpostgresql,R,Postgresql,Shiny,Rpostgresql,我的数据库密码存储在pgpass.conf文件中。我使用RPostgres从R连接到数据库,没有指定密码,因此从pgpass.conf读取,如下所示: con <- dbConnect(RPostgres::Postgres(), dbname = "dbname", user = "username", host = "localhost", port

我的数据库密码存储在
pgpass.conf
文件中。我使用
RPostgres
从R连接到数据库,没有指定密码,因此从
pgpass.conf
读取,如下所示:

con <- dbConnect(RPostgres::Postgres(), 
                 dbname = "dbname",
                 user = "username",
                 host = "localhost",
                 port = "5432")
在连接定义中明确给出密码时:

con <- dbConnect(RPostgres::Postgres(), 
                 dbname = "dbname",
                 user = "username",
                 host = "localhost",
                 password = "mypass",
                 port = "5432")
我使用32位的R,但我在64位上测试过,结果是一样的。闪亮的应用程序在浏览器(Chrome)和Rstudio浏览器中运行

这里是我的会话信息:

R version 3.2.2 (2015-08-14)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Polish_Poland.1250  LC_CTYPE=Polish_Poland.1250        LC_MONETARY=Polish_Poland.1250
[4] LC_NUMERIC=C                   LC_TIME=Polish_Poland.1250    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RPostgres_0.1  DBI_0.3.1.9008 shiny_0.12.2  

loaded via a namespace (and not attached):
[1] R6_2.1.1         htmltools_0.2.6  tools_3.2.2      rstudioapi_0.3.1     Rcpp_0.12.1.3    jsonlite_0.9.17  digest_0.6.8    
[8] xtable_1.7-4     httpuv_1.3.3     mime_0.4         RPostgreSQL_0.4

在Shining和system R GUI之间运行命令的环境可能有所不同。我通过将我的凭证存储在一个:

然后从BASH:

Rscript analysis.R staging

错误在Postgresql中:

C:\Users\...\AppData\Roaming/postgresql/pgpass.conf

文件路径包含“/”而不是“\”

这确实是解决我的问题的可行且非常简单的方法。不管怎样,我仍然很好奇,标准的
pgpass
文件怎么会在Shiny中不能正常工作。我试图在源文件中为Shiny(
httpuv
实际上)和
psql
找到一些东西,但我对
C
不太熟练,所以我什么也没找到。现代Windows通常可以交替使用\和/作为文件路径(请参阅)
readRenviron("~/.Renviron")
con <- dbConnect(RPostgres::Postgres(), 
                 dbname = Sys.getenv('pg_db'),
                 user = Sys.getenv('api_user'),
                 ...)
#!/usr/bin/env Rscript
environ_path <- switch(commandArgs(),
                  'staging' = {"~/staging.Renviron"},
                  'production' = {"~/production/Renviron"})

readRenviron(environ_path)
Rscript analysis.R staging
C:\Users\...\AppData\Roaming/postgresql/pgpass.conf