r-在AWS EC2中连接Rstudio和PostgreSQL



我目前在AWS EC2(Ubuntu(中运行PostgreSQL服务器,从本地服务器访问它时遇到问题。如何从本地RStudio访问远程数据库?

R中的代码:

library(RPostgreSQL)
library(DBI)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, user='postgres', password='password', dbname='dvd', host='ec2-xx-xxx-xxxx-xxxx.ap-northeast-2.compute.amazonaws.com',port=5432)
dbListTables(con)

结果:

Error in postgresqlNewConnection(drv, ...) : 
RS-DBI driver: (could not connect postgres@ec2-xx-xxx-xxxx-xxxx.ap-northeast-2.compute.amazonaws.com:5432 on dbname "dvd": FATAL:  no pg_hba.conf entry for host "130.17.152.1”, user "postgres", database "dvd", SSL off
)
Calls: <Anonymous> ... eval -> dbConnect -> dbConnect -> postgresqlNewConnection
Execution halted

对于AWS安全组,我为PostgreSQL添加了一个入站,其源代码设置为端口范围为5432的任何位置。

默认情况下,Postgres不允许远程连接。要允许远程连接,您需要在EC2服务器上的pg_hba.conf文件中添加一个条目。pg_hba.conf的确切位置因安装的不同而不同,但以下是一些可以尝试的路径:

/etc/postgresql/[VERSION]/main/
/var/lib/postgresql/[version]/

例如,一旦找到pg_hba.conf,就需要添加一行以允许远程连接。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host  dvd             postgres        130.17.152.1/32         md5

这假设您的本地服务器IP(13017.152.1(是静态的。如果没有,您可以对ADDRESS使用0.0.0.0/0,也可以对DATABASE和USER使用all,如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host  all             all             0.0.0.0:0                     md5

这取决于您希望您的安全性有多严格,但请记住,这是数据库级别的安全性,与您的AWS安全组完全独立。

请参阅https://www.postgresql.org/docs/9.1/auth-pg-hba-conf.html了解更多信息。

最新更新