psqlODBC 配置选项
高级选项 1/3 对话框
- 默认值: 点击此按钮恢复以下设置的正常默认值。
- 识别唯一索引: 选中此选项。
- 使用 Declare/Fetch: 如果为真,驱动程序会自动使用 declare 游标/fetch 来处理 SELECT 语句,并在缓存中保留 100 行。这通常是一个很大的优势,尤其是在您只对读取感兴趣,而不进行更新的情况下。它会导致驱动程序不会占用大量内存来缓冲整个结果集。如果设置为假,则不会使用游标,驱动程序将检索整个结果集。对于非常大的表,这非常低效,可能会耗尽所有 Windows 内存/资源。但是,它可能更好地处理更新,因为表不会保持打开状态,就像使用游标时一样。这是旧的 podbc32 驱动程序的风格。但是,内存分配的行为得到了很大改进,因此即使不使用游标,性能也应该至少比旧的 podbc32 更好。
- CommLog (C:\psqlodbc_xxxx.log): 将与后端的通信记录到该文件。这对于调试问题很有用。
- 解析语句: 告诉驱动程序如何收集有关查询结果列的信息,如果应用程序在执行查询之前请求该信息。另请参阅服务器端准备选项。
驱动程序首先检查此选项。如果禁用,则检查服务器端准备选项。
如果启用此选项,驱动程序将解析 SQL 查询语句以识别列和表,并收集有关它们的统计信息,例如精度、可空性、别名等。然后,它将在 SQLDescribeCol、SQLColAttributes 和 SQLNumResultCols 中报告此信息。
当此选项被禁用(默认值)时,查询将被发送到服务器进行解析和描述。如果解析器无法处理列(因为它是一个函数或表达式等),它将回退到在服务器中描述语句。解析器相当复杂,可以处理许多事情,例如列和表别名、引号标识符、文字、联接、交叉积等。它可以正确识别函数或表达式列,无论其复杂程度如何,但它不会尝试确定这些列的数据类型或精度。
- 忽略超时:忽略使用 SQLSetStmtAttr() 设置的 SQL_ATTR_QUERY_TIMEOUT。某些工具在内部发出 SQLSetStmtAttr(.., SQL_ATTR_QUERY_TIMEOUT, ...),有时用户很难更改该值。
- MyLog (C:\mylog_xxxx.log):将调试消息记录到该文件。这对于调试驱动程序问题很有用。
- 未知大小:这控制 SQLDescribeCol 和 SQLColAttributes 在结果集中返回字符数据类型(varchar、text 和 unknown)的精度,当精度未知时。这更多的是针对 PostgreSQL 6.4 之前版本无法返回 varchar 数据类型定义的列宽的解决方法。
- 最大值:始终返回数据类型的最大精度。
- 不知道:返回“不知道”值,让应用程序自行决定。
- 最长:返回任何行中该列的最长字符串长度。使用游标时要注意此设置,因为缓存大小可能不是缓存中最长列的良好表示。
MS Access:似乎可以正常处理最大值设置,以及所有其他设置。
Borland:如果大小很大且列很多,Borland 在使用最大值大小时可能会严重崩溃(它似乎无法很好地处理内存分配)。
- 数据类型选项:影响某些数据类型的映射方式
- Text as LongVarChar:PostgreSQL TEXT 类型映射到 SQLLongVarchar,否则映射到 SQLVarchar。
- Unknowns as LongVarChar:未知类型(数组等)映射到 SQLLongVarChar,否则映射到 SQLVarchar
- Bools as Char:Bools 映射到 SQL_CHAR,否则映射到 SQL_BIT。
- Max Varchar Varchar 和 BPChar(char[x]) 类型的最大精度。默认值为 254,实际上由于空终止符,这意味着 255。注意,如果将此值设置为高于 254,Access 将不允许您对 varchar 列进行索引!
- 缓存大小:使用游标时,这是元组缓存的行大小,默认值为 100 行。如果不使用游标,则此设置没有意义。
- Max LongVarChar:LongVarChar 类型的最大精度。默认值为 4094,实际上由于空终止符,这意味着 4095。您甚至可以为此大小指定 (-4),即 odbc SQL_NO_TOTAL 值。
- 系统表前缀: 视为系统表的表名附加前缀。 以 "pg_" 开头的表始终被视为系统表,即使没有此选项。 使用分号 (;) 分隔每个前缀。
- 批处理大小: 使用参数数组执行批处理时的块大小。 将此选项设置为 1 会强制逐个执行(之前的行为)。
高级选项 2/3 对话框
- 只读: 数据源是否允许更新。
- 显示系统表: 驱动程序将在 SQLTables 中将系统表视为常规表。 这对于 Access 很有用,这样您就可以看到系统表。
- LF <-> CR/LF 转换: 将 Unix 风格的行尾符转换为 DOS 风格。
- 可更新游标: 在驱动程序中启用可更新游标模拟。
- Bytea 作为 LO: 允许将 bytea 列用于大对象。
- 行版本控制: 允许应用程序检测您尝试更新行时数据是否已被其他用户修改。 它还可以加快更新过程,因为不需要在 where 子句中指定每个单独的列来更新行。 驱动程序使用 PostgreSQL 的 "xmin" 系统字段来允许行版本控制。 Microsoft 产品似乎很好地使用了此选项。 有关将行版本控制功能用于数据库所需操作的详细信息,请参阅 常见问题解答。
- 显示可选错误消息: 显示可选(详细信息、提示、语句位置等)错误消息。
- True 为 -1: 为了与某些应用程序兼容,将 TRUE 表示为 -1。
- 服务器端准备: 如果设置,驱动程序将使用服务器端准备好的语句。 另请参阅解析语句选项。 请注意,如果查询需要在执行之前进行描述,例如,因为应用程序在 SQLExecute() 之前调用了 SQLDescribeCol() 或 SQLNumResultCols(),则即使禁用了此选项,驱动程序也会向服务器发送解析请求。 在这种情况下,发送到服务器进行解析的查询将使用实际参数值替换参数标记,或者如果值尚不清楚,则使用 NULL 文字。
- Int8 作为: 定义要将 int8 列报告为哪种数据类型。
- Numeric 作为: 指定从没有精度的数字项到 SQL 数据类型的映射。 可以指定 numeric(默认)、varchar、double 或 memo(SQL_LONGVARCHAR)。
- 额外选项: 以下位的组合。
0x1: 强制输出短格式的连接字符串。 当您使用 MFC CDatabase 类时,请检查此位。
0x2: 伪造 MS SQL Server,以便 MS Access 将 PostgreSQL 的 serial 类型识别为 AutoNumber 类型。
0x4: 对于应用程序的查询,回复 ANSI(而不是 Unicode)字符类型。 如果您的应用程序似乎不擅长处理 Unicode 数据,请尝试检查此位。
- 错误发生时的回滚级别: 指定发生错误时要回滚的内容。
- Nop(0): 不要回滚任何内容,让应用程序处理错误。
- 事务 (1): 回滚整个事务。
- 语句 (2): 回滚语句。
设置说明:此规范使用 PROTOCOL 选项参数设置。
PROTOCOL=7.4-(0|1|2)
默认值为语句(对于 8.0 之前的服务器,它为事务)。
- OID 选项
- 显示列: 在 SQLColumns 中包含 OID。这对于使用 OID 作为唯一标识符来更新记录很有用,尤其是在没有合适的键或键包含多个部分时,这会导致后端出现问题。
- 伪索引: 此选项在 OID 上伪造一个唯一索引。这在 OID 上没有真正的唯一索引且应用程序无法询问唯一标识符应该是什么时很有用(例如,Access 2.0)。
- 连接设置: 驱动程序在成功连接后将这些命令发送到后端。它在发送驱动程序“连接设置”后发送这些设置。使用分号 (;) 分隔命令。现在它可以处理任何查询,即使它返回结果。但是,结果将被丢弃!
- TCP KEEPALIVE 设置(以秒为单位): 指定 TCP keepalives 设置。
- 禁用: 检查何时不使用客户端 TCP keepalives。
- 空闲时间: TCP 应向服务器发送 keepalive 消息的非活动秒数。
- 间隔: 未被服务器确认的 TCP keepalive 消息应重新传输的秒数。
高级选项 3/3 对话框
- 允许 MSDTC 无法恢复的连接?: 如何测试分布式事务。
- 是: 除非应用程序崩溃,否则 MSDTC 是不必要的。因此,不要检查 MSDTC 的连接性。
- 拒绝 sslmode verify-[ca|full]: 拒绝使用 verify-ca 或 verify-full 模式的 ssl 连接,因为在这种情况下,msdtc 很难建立连接。
- 否: 首先确认 MSDTC 的连接性。
- Libpq 参数: 使用 conninfo 样式字符串指定 libpq 连接参数,例如 sslrootcert=c:\\myfolder\\myroot sslcert=C:\\myfolder\\mycert sslkey=C:\\myfolder\\mykey。
虽然可以使用此 (pqopt) 选项设置主机、端口、dbname、用户、密码、sslmode、keepalives_idle 或 keepalive_interval 参数,但不建议使用,因为它们通常由其他选项设置。当某些参数的设置与其他普通选项冲突时,连接将被拒绝。
全局设置对话框
此对话框允许您指定预连接/默认日志记录选项
- CommLog (C:\psqlodbc_xxxx.log - 通信日志): 将通信日志记录到该文件。这对于调试问题很有用。
- MyLog (C:\mylog_xxxx.log - 详细调试输出): 将调试消息记录到该文件。这对于调试驱动程序问题很有用。
- MSDTCLog (C:\pgdtclog\mylog_xxxx.log - MSDTC 调试输出): 将调试消息记录到该文件。这对于调试 MSDTC 问题很有用。
- 日志输出持有者的规范: 调整写入权限。
管理 DSN 对话框
此对话框允许您选择要用于此连接的 PostgreSQL ODBC 驱动程序。请注意,这可能不适用于第三方驱动程序。
如何指定为连接选项
有一种方法可以在关键字字符串中指定连接选项。
示例:VBA
-
myConn = "ODBC;DRIVER={PostgreSQL Unicode};" & serverConn & _
"A0=0;A1=7.4;A2=0;A3=0;A4=0;A5=0;A6=;A7=100;A8=4096;A9=0;" & _
"B0=254;B1=8190;B2=0;B3=0;B4=1;B5=1;B6=0;B7=1;B8=0;B9=1;BI=-5;" & _
"C0=0;C2=dd_;C4=1;C5=1;C6=1;C7=1;C8=1;C9=0;CA=verify-full;D1=30;D4=40;" & _
"D5={sslrootcert=C:\\myfolder\\myroot sslcert=C:\\myfolder\\mycert sslkey=C:\\myfolder\\mykey}"
有关详细信息,请参阅 关键字列表。