PostgreSQL ODBC(psqlodbc)连接语句超时问题求助
解决方案:绕过psqlodbc默认30秒查询超时(HotDocs环境)
方案1:通过Windows注册表修改驱动全局超时设置
psqlodbc的默认超时参数存储在注册表中,需根据系统和HotDocs位数操作:
- 32位系统/32位HotDocs:打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode(x86)(使用ANSI驱动则对应PostgreSQL ANSI(x86)) - 64位系统+64位HotDocs:定位到
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode或PostgreSQL ANSI
在对应项中新建字符串值,命名为StatementTimeout,设置值为0(无超时)或目标毫秒数(如3600000即1小时)。修改后重启HotDocs生效。
方案2:ODBC数据源管理器可视化配置
- 打开对应位数的ODBC管理器:32位版本路径为
C:\Windows\SysWOW64\odbcad32.exe,64位版本为C:\Windows\System32\odbcad32.exe - 找到HotDocs使用的PostgreSQL数据源,点击「配置」
- 切换到「高级」选项卡,找到「Statement Timeout」项,设置为
0或所需毫秒数,保存配置后重启HotDocs。
方案3:连接字符串直接指定超时参数
psqlodbc支持在连接字符串中加入StatementTimeout参数(区分大小写),格式示例:
Driver={PostgreSQL Unicode};Server=你的服务器地址;Port=5432;Database=目标库;Uid=用户名;Pwd=密码;StatementTimeout=3600000;
值设为0表示禁用超时,其他数值为超时毫秒数。
之前操作无效的原因说明
Ignore Timeout、QueryTimeout、CommandTimeout均非psqlodbc标准参数,驱动无法识别ConnSettings中设置SET statement_timeout会被驱动层面的默认超时覆盖,驱动优先级高于数据库端设置- 在PostgreSQL函数内设置
statement_timeout仅对函数内部会话生效,但驱动会在每次执行查询前重置超时为默认值
内容的提问来源于stack exchange,提问作者user2437443
相关产品推荐
相关产品推荐

