提问人:Chris 提问时间:8/10/2023 更新时间:8/10/2023 访问量:42
通过 RPostgreSQL 传递 postgresql 参数关键字
Passing postgresql parameter keywords via RPostgreSQL
问:
我想使用 R 包 RPostgreQSL 传递一些参数关键字(特别是 、 、 或 )以连接到我的数据库。
我已经在文档和stackoverflow中搜索了实现,但没有找到解决方案。keepalives
keepalives_idle
keepalives_count
connect_timeout
有没有办法使用 RPostgresSQL 传递这些参数关键字?
我试过什么:
- 通过 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)
- 作为附加命令行选项:
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"
- 通过 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"
答:
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_timeout
options
评论
0赞
Chris
8/11/2023
很好的答案,谢谢!确认我看到第 20 章参数的工作具有相同的行为,但参数关键字中列出的那些没有,选项除外。我发现这个 R 包确实支持将参数从参数关键字列表直接传递到调用。github.com/r-dbi/RPostgresdbConnect
评论