通过 RPostgreSQL 传递 postgresql 参数关键字

Passing postgresql parameter keywords via RPostgreSQL

提问人:Chris 提问时间:8/10/2023 更新时间:8/10/2023 访问量:42

问:

我想使用 R 包 RPostgreQSL 传递一些参数关键字(特别是 、 、 或 )以连接到我的数据库。 我已经在文档和stackoverflow中搜索了实现,但没有找到解决方案。keepaliveskeepalives_idlekeepalives_countconnect_timeout

有没有办法使用 RPostgresSQL 传递这些参数关键字?

我试过什么:

  1. 通过 dbConnect 函数作为附加参数
conn <- RPostgreSQL::dbConnect(driver,
                               host = Sys.getenv("DBHOST"),
                               dbname = Sys.getenv("DBNAME"),
                               user = Sys.getenv("DBUSER"),
                               password = Sys.getenv("DBPASSWORD"),
                               port = Sys.getenv("DBPORT"),
                               # Parameter Keywords
                               connect_timeout = 2, 
                               keepalives = 0,
                               keepalives_idle = 0, 
                               keepalives_count = 1, 

)

这导致:

Error in postgresqlNewConnection(drv, ...) : 
  unused arguments (connect_timeout = 2, keepalives = 0, keepalives_idle = 0, keepalives_count = 1)
  1. 作为附加命令行选项:
conn <- RPostgreSQL::dbConnect(driver,
                               host = Sys.getenv("DBHOST"),
                               dbname = Sys.getenv("DBNAME"),
                               user = Sys.getenv("DBUSER"),
                               password = Sys.getenv("DBPASSWORD"),
                               port = Sys.getenv("DBPORT"),
                               options = "-c connect_timeout=2"
)

这导致:

Error in postgresqlNewConnection(drv, ...) : 
  RPosgreSQL error: could not connect <omitted>@<omitted>:<omitted> on dbname "<omitted>" FATAL:  unrecognized configuration parameter "connect_timeout"
  1. 通过 dbSendQuery 函数:
RPostgreSQL::dbSendQuery(conn, "SET statement_timeout to 1; SET connect_timeout to 2 ")

这导致

Error in postgresqlExecStatement(conn, statement, ...) : 
  RPosgreSQL error: could not Retrieve the result : ERROR:  unrecognized configuration parameter "connect_timeout"
R PostgreSQL 保持活动状态 rpostgresql

评论


答:

1赞 Sheng Pei Wang 8/10/2023 #1

TL;DR:我认为 RPostgreQSL 目前不支持这些连接参数。

dbConnect-methods 的 R 文档

options 要发送到服务器的命令行选项。

options 指定要发送到服务器的命令行选项 连接开始。例如,将其设置为 -c geqo=off 会设置 会话的 geqo 参数值设置为 off。此空间中的空间 string 被视为分隔命令行参数,除非 用反斜杠 () 转义;write \ 表示文字 反斜線。有关可用选项的详细讨论,请参阅 第20章.

  • 我尝试了第 20 章中的几个选项,服务器确实接受了这些参数。例如
    conn <- RPostgreSQL::dbConnect(driver,
                                   host = Sys.getenv("DBHOST"),
                                   dbname = Sys.getenv("DBNAME"),
                                   user = Sys.getenv("DBUSER"),                               
                                   password = Sys.getenv("DBPASSWORD"),
                                   port = Sys.getenv("DBPORT"),
                                   options="-c client_min_messages=error"
    )

但是您要使用的参数,例如 ,不是第 20 章(服务器选项)的一部分。相反,它们是与参数平行的连接参数。我的预感是RPostgreQSL现在不支持它们。connect_timeoutoptions

评论

0赞 Chris 8/11/2023
很好的答案,谢谢!确认我看到第 20 章参数的工作具有相同的行为,但参数关键字中列出的那些没有,选项除外。我发现这个 R 包确实支持将参数从参数关键字列表直接传递到调用。github.com/r-dbi/RPostgresdbConnect