PostgreSQL ODBC (psqlodbc) ODBC 连接语句超时

问题描述 投票:0回答:2

我正在旧程序(HotDocs Document Assembly)中通过 ODBC 连接字符串访问 Postgres 数据库。这是访问 HotDocs 中数据库的唯一方法

我运行的查询不断出现错误,执行时间超过 30 秒:

错误:由于语句超时而取消语句; 执行查询时出错(80004005 - 未指定错误)来源:Microsoft OLE DB Provider for ODBC Drivers

显然 postgres 在 psqlodbc v 9+ 中引入了 30 秒的默认查询超时,但我还没有找到解决这个问题的方法。

我在网上找到的许多类似问题要么是指非 ODBC 超时,可以通过运行查询来更新超时设置来解决,要么编辑 postgresql.conf。但我的查询在 PGAdmin 或其他非 ODBC 客户端中没有超时。只是 ODBC 连接超时。

我发现的其他帖子使用不同的环境来访问 ODBC 驱动程序(如 VBA),并且它们似乎能够通过 ODBC API 将不同的参数传递给 ODBC (https://learn.microsoft.com/ en-us/sql/odbc/reference/syntax/sqlsetstmtattr-function?view=sql-server-ver16),我在 HotDocs 中没有。就我而言,我需要一个可以应用于 ODBC 驱动程序设置(在 Windows ODBC 管理器/注册表中)或我在 HotDocs 中使用的连接字符串的解决方案。

我尝试修改连接字符串来添加

Ignore Timeout=1
参数(都在“扩展属性”参数及其自己的单独参数中)。还尝试了连接字符串和注册表中的
QueryTimeout=3600000
QueryTimeout=1
参数(基于这篇文章:https://groups.google.com/g/ensemble-in-healthcare/c/8dRv1n-DwpU? pli=1)。也试过
CommandTimeout=3600

我尝试将

SET statement_timeout=3600000
添加到“ConnSettings”参数(基于此链接https://pgsql-odbc.postgresql.narkive.com/tq9IPYmq/odbc-sql-query-timeout

我尝试直接在从 HotDocs 运行的 postgres 函数代码中添加

SET statement_timeout=3600000

对我来说,没有一种简单的方法可以在 ODBC 连接字符串中设置不同的语句超时(或无超时),这似乎很疯狂。

这篇文章中的用户 (https://postgrespro.com/list/thread-id/2448747) 建议他能够编辑 ODBC 驱动程序的实际 DLL 文件来设置

statement_timeout=0
。但我不确定如何编辑二进制 DLL 文件来更改它?

postgresql odbc connection-string psqlodbc
2个回答
3
投票

如果您能够通过 ODBC 数据源上的 DSN 连接,您可以选中此框,它对我有用。


0
投票

我知道这是一个旧线程,但这对我有用,基于https://odbc.postgresql.org/docs/config.html(页面底部标题为“如何指定为连接”的部分)选项”)和https://odbc.postgresql.org/docs/config-opt.html(忽略超时的代码位于最底部)。

 D9=1;
添加到您的连接字符串中。像这样,其中 serverConn 是连接字符串详细信息,例如用户名等:

myConn = "ODBC;DRIVER={PostgreSQL Unicode};" & serverConn & " D9=1;"
© www.soinside.com 2019 - 2024. All rights reserved.