【发布时间】:2022-10-07 03:22:53
【问题描述】:
我正在通过旧程序(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 (https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlsetstmtattr-function?view=sql-server-ver16) 将不同的参数传递给 ODBC,而我不这样做在 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 文件来改变它?
-
IgnoreTimeout选项应该可以工作。 -
我希望它可以工作,但我尝试过几种不同的格式:在 \"Ignore\" 和 \"Timeout\" 之间有和没有空格,\"IgnoreTimeout=1\" 和 \"IgnoreTimeout =0\",作为它自己的参数以及在 \"ExtendedProperties\" 参数中。我的查询仍然超时
标签: postgresql odbc connection-string psqlodbc