【问题标题】:PostgreSQL ODBC (psqlodbc) Statement Timeout on ODBC ConnectionPostgreSQL ODBC (psqlodbc) ODBC 连接上的语句超时
【发布时间】: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=3600000QueryTimeout=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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多