如何通过RPostgreSQL传递PostgreSQL参数关键字?
如何通过RPostgreSQL传递PostgreSQL连接参数关键字
你想传递的keepalives、keepalives_idle、keepalives_count、connect_timeout这些属于PostgreSQL客户端libpq的连接参数,但RPostgreSQL本身并没有提供直接传递这些参数的官方接口,这也是你之前三种尝试都失败的原因:
为什么你的尝试都不行?
- 直接作为额外参数传入
dbConnect:RPostgreSQL的dbConnect函数只定义了host、dbname、user等有限参数,没有预留这些libpq参数的位置,所以会报“未使用参数”错误。 - 通过
options参数传入-c选项:-c是用来设置PostgreSQL服务器端的配置参数,而connect_timeout是客户端libpq的参数,服务器根本不认识这个参数,自然会报错。 - 用
SET命令设置:同样,connect_timeout这类是客户端参数,不是服务器端可动态设置的参数,SET命令只对服务器端参数有效,所以无效。
解决方案
推荐:切换到RPostgres包
RPostgres是PostgreSQL官方推荐的R驱动,基于libpq开发,原生支持传递这些连接参数,用法很简单:
library(RPostgres) conn <- dbConnect(Postgres(), host = Sys.getenv("DBHOST"), dbname = Sys.getenv("DBNAME"), user = Sys.getenv("DBUSER"), password = Sys.getenv("DBPASSWORD"), port = Sys.getenv("DBPORT"), connect_timeout = 2, keepalives = 0, keepalives_idle = 0, keepalives_count = 1)
若必须使用RPostgreSQL(不推荐)
RPostgreSQL的维护进度较慢,没有暴露这些参数的接口。如果一定要用,只能修改包的源码:比如找到postgresqlNewConnection函数的C语言实现,在构建连接字符串时手动添加这些参数。但这种方法需要C语言基础,且后续包更新后需要重新修改,维护成本很高。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

