使用R连接Ubuntu系统中安装的PostgreSQL数据库失败该如何解决
问题根源
Ubuntu系统默认安装的PostgreSQL采用peer认证作为本地Unix套接字的认证规则,即仅允许操作系统用户名与PostgreSQL用户名一致的用户免密登录。你在R连接代码中指定了host='localhost',会强制走TCP/IP连接,此时触发密码认证规则,而postgres用户未设置密码,因此连接失败。
解决方案
推荐两种可行的处理方式,按需选择即可:
方案1:修改R连接参数,走Unix套接字认证
如果你的R程序是在postgres用户下运行,直接删除连接参数中的host字段即可,无需设置密码,修改后代码如下:
connection <- dbConnect(driver, dbname='testchr22', port=5432, user= 'postgres', password='')
如果是普通用户运行R程序,该方案不适用,请选择方案2。
方案2:设置postgres用户密码,启用TCP密码认证
步骤1:登录PostgreSQL命令行
依次执行以下命令进入psql交互界面:
sudo -i -u postgres psql
步骤2:给postgres用户设置密码
在psql中执行以下SQL语句,将自定义密码替换为你要设置的密码:
ALTER USER postgres PASSWORD '自定义密码';
执行完成后输入\q退出psql。
步骤3:(可选)调整认证配置并重启服务
如果设置密码后依然连接失败,需修改PostgreSQL的客户端认证配置:
- 打开配置文件(以PostgreSQL 14版本为例,版本号替换为你实际安装的版本):
sudo nano /etc/postgresql/14/main/pg_hba.conf
- 找到如下配置行:
host all all 127.0.0.1/32 peer
将末尾的peer修改为md5,保存退出。
3. 重启PostgreSQL服务使配置生效:
sudo systemctl restart postgresql
步骤4:修改R连接参数
将连接代码中的password字段填为你刚才设置的密码即可:
connection <- dbConnect(driver, dbname='testchr22', host='localhost', port=5432, user= 'postgres', password='自定义密码')
验证方法
修改完成后可先在终端执行以下命令验证TCP连接是否正常,提示输入密码时输入设置的密码,能正常登录即可正常运行R代码:
psql -h localhost -U postgres -d testchr22
内容的提问来源于stack exchange,提问作者zhouhufeng
相关产品推荐
相关产品推荐

