psqlODBC 常见问题解答

如果这些问题无法解决,邮件列表可能会有帮助。
关于 PostgreSQL 的 ODBC 接口的讨论。

此文档的最新版本可以在 https://odbc.postgresql.ac.cn/faq.html 查看。


1) 常规

1.1) 如何提交新功能或补丁的想法?
1.2) 我是否需要编译驱动程序才能使用它?
1.3) 如何安装驱动程序?
1.4) 驱动程序可以在哪些操作系统上运行?
1.5) 我见过其他 PostgreSQL ODBC 驱动程序。哪个是正确的?
1.6) 如何报告错误或其他问题?

2) 基础

2.1) 如何设置数据源?
2.2) 文件 DSN、系统 DSN 和用户 DSN 之间有什么区别?
2.3) 如何访问更高级的驱动程序和/或数据源选项?
2.4) 在哪里可以找到有关 ODBC 错误的更多信息?
2.5) 安装了 2 个驱动程序 - 我应该使用哪个?

3) 连接

3.1) 当我尝试连接到数据源时,为什么我会收到类似“无法使用未知身份验证类型将客户端身份验证为 Postgres 用户:be_recvauth:无法识别的消息类型:65536”的消息?
3.2) 为什么我会收到类似“用户身份验证失败”的消息?
3.3) 我需要做些什么才能建立与数据库的连接?
3.4) psqlODBC 是否支持连接的加密登录?

4) 高级

4.1) 为什么带有变音符或重音符的字符或其他非 ASCII 字符在某些应用程序中显示为“?”
4.2) 驱动程序支持哪些数据类型?
4.3) 如何使用行版本控制 - 或者 - 为什么我会收到有关 xid 和 int4 没有运算符的消息?
4.4) 我可以使用大型对象或 OLE 吗?
4.5) 为什么 PostgreSQL 后端抱怨内存不足,而我浏览带有主键的表时?
4.6) 如何让我的应用程序识别主键?

5) Borland 应用

5.1) 哪些驱动程序/数据源选项与 Borland 产品配合良好?
5.2) # 为什么 varchar/char 数据类型在 Borland DBExplorer 中没有显示正确的精度 - 或者 - 为什么所有 varchar/char 精度都显示为 128?

6) Microsoft 应用

6.1) 为什么基于 int4 的聚合似乎不起作用?
6.2) 为什么 Access 每次运行 SQL 直通查询时都强制我指定数据源?
6.3) 为什么 MS Access 有时会抱怨 GROUP BY 或 ORDER BY 不在目标列表中?
6.4) 为什么我在 Access 2000 及更高版本中收到“写入冲突 - 此记录自您开始编辑后已被其他用户更改”的错误?
6.5) 使用 MS Access,为什么我不能对文本字段建立索引 - 或者 - 为什么我在定义索引或关系时收到“无效字段定义 'field'”的错误?
6.6) 使用 MS Access,为什么我不能对类型为“text”的列进行 GROUP BY、ORDER BY,甚至 WHERE 选择?
6.7) 使用 MS Access,为什么我在某些操作后在行中看到 #Deleted#?
6.8) 在 64 位 Windows 上安装 psqlODBC。

1) 常规

1.1) 如何提交新功能甚至补丁的想法?

您可以发送邮件到 [email protected]

1.2) 我是否需要编译驱动程序才能使用它?

可能不需要。如果您使用的是 Windows,您真正需要做的就是下载并运行完整版。

1.3) 如何安装驱动程序?

安装驱动程序最简单的方法是获取完整发行版。只需下载、解压缩并运行安装程序。安装是一个标准的 Windows 安装程序包,它将引导您完成整个过程。对于将来的升级,可以使用 MSI 发行版。它要小得多,因为它不包含 Windows 安装程序可再发行组件,您只需要安装一次。第二个选择是自己编译驱动程序。如果您在 Unix 平台上使用此驱动程序,目前这是您唯一的选项。

1.4) 驱动程序在哪些操作系统上运行?

psqlODBC 可执行文件是在 32 位 Wintel 平台上编写和编译的。这包括 Windows 95、98、ME、NT、2000 和 XP。16 位应用程序能够使用 32 位驱动程序,但仅限于这些平台。

我们不为 Unix 分发二进制文件。但是,源代码已移植到 Unix 下编译。Unix 有两个驱动程序管理器可用,UnixODBCiODBC

1.5) 我见过其他 PostgreSQL ODBC 驱动程序。哪个是正确的?

这个!这是官方 PostgreSQL ODBC 驱动程序。

1.6) 如何报告错误或其他问题?

您可以发送邮件到 [email protected],但是,您应该附加以下内容

但是,在发布之前,请确保您正在运行最新版本的 psqlODBC。

2) 基础

2.1) 如何设置数据源?

对于 Windows,请使用控制面板中的 ODBC 管理员(在某些版本中,它可能位于“管理工具”文件夹中)。在这里,您可以添加、修改或删除数据源。

2.2) 文件 DSN、系统 DSN 和用户 DSN 之间有什么区别?

系统 DSN 和用户 DSN 仅在系统上谁可以访问它们方面有所不同。但是,文件 DSN 并不是真正的数据源。它是一个包含用于直接连接到 ODBC 驱动程序的所有连接参数的文件。

2.3) 如何访问更高级的驱动程序和/或数据源选项?

首先,选择您要配置的收藏夹数据源。然后在“PostgreSQL 驱动程序设置”对话框中,在“选项(高级)”下选择“驱动程序”按钮或“数据源”按钮。这将弹出一个包含您可以配置的选项的另一个对话框。有关所有这些选项的信息,请参阅配置帮助。

2.4) 我在哪里可以找到更多关于 ODBC 错误的信息?

ODBC 驱动程序有一个选项可以将所有直接通信(查询、更新等)以及错误消息和通知记录到 commlog 文件中。此外,它现在还将所有 ODBC 连接和语句错误记录到此文件中,并提供详细的信息。这对于那些在出现问题时提供误导性、很少或没有描述性信息的应用程序来说非常有用(VisData 就是一个很好的例子)。

2.5) 安装了两个驱动程序 - 我应该使用哪个?

PostgreSQL Unicode 是一个支持 Unicode 的驱动程序,它可以与 Microsoft Access 等现代应用程序一起使用,支持来自各种语言的字符。您应该将此驱动程序与编码为 'UNICODE'(在 PostgreSQL 中更准确地称为 'UTF-8')的 PostgreSQL 数据库一起使用。

PostgreSQL ANSI 是一个 ANSI 驱动程序,它也可以处理一些多字节字符集,例如 EUC_JP、BIG5 和 Shift-JIS。此驱动程序也应该与使用任何 LATIN 字符集编码的数据库一起使用。

请注意,某些应用程序(特别是 Borland BDE)无法与 Unicode ODBC 驱动程序正常工作。在这种情况下,您必须使用 ANSI 驱动程序。

3) 连接

3.1) 当我尝试连接到数据源时,为什么我会收到类似“无法使用未知身份验证类型作为 Postgres 用户进行身份验证:be_recvauth:无法识别的消息类型:65536”的消息?

此消息来自 PostgreSQL 后端,很可能是由于 ODBC 驱动程序和后端之间存在协议不匹配。例如,如果您使用 PostgreSQL 6.2 作为后端,并尝试使用 ODBC 驱动程序而没有正确设置协议,则会发生此错误。您必须在 ODBC 驱动程序配置对话框中检查“6.2 协议”高级数据源选项。

注意:如果您现在仍在运行 6.x 版本,您真的、真的、真的应该尽快升级到 8.x 版本!

3.2) 为什么我会收到类似“用户身份验证失败”的消息?

请验证您尝试连接到的数据库是否存在,并且您有权访问它。此外,请参阅上面关于用户名和密码身份验证的问题。

3.3) 我需要做些什么才能建立与数据库的连接?

ODBC 连接清单

3.4) psqlODBC 是否支持加密登录连接?

是的。psqlODBC 支持“md5”加密登录,但不支持“crypt”登录。请记住,登录后,ODBC 会以明文形式发送所有查询,因此您只保护了密码。此外,对 md5 登录的支持是在 2001 年后期添加的,因此如果您使用的是旧版本的 psqlODBC,则可能需要更新它。

注意:从 08.01.002 版本开始,psqlODBC 现在支持 SSL 加密连接。

4) 高级

4.1) 为什么带有变音符或重音符号的字符或其他非 ASCII 字符在某些应用程序中显示为“?”

您可能正在使用 **PostgreSQL Unicode** 驱动程序与非 Unicode、8 位数据(例如,来自 LATIN 编码之一)一起使用。您应该使用 **PostgreSQL ANSI** 驱动程序,或者将您的数据移动到 Unicode 数据库。

4.2) 驱动程序支持哪些数据类型?

驱动程序完全支持所有 PostgreSQL 标准数据类型。这些是:bool、int2、int4、int8、float4、float8、date、time、abstime、datetime、timestamp、char、varchar 和 text。

对所有其他数据类型提供部分支持。这些示例:point、circle、box 和数组。字符串支持仅提供给这些非标准类型。换句话说,它们将作为 SQL_VARCHAR 返回,并且可以像任何其他数据类型一样显示和更新。结果行为可能会因每个应用程序和数据类型而异。

在 int4[] 和 MS Access 97 的情况下,它可以有效地完成工作。数组可以干净地显示和更新。算术有点棘手。MS Access 在查询构建器中抱怨“t.a[1]”。它不喜欢语法,永远不会将其发送到后端。解决方法是选择 SQL 直通选项。这将允许您构建类似“t.a[0] * t.a[1]”的表达式。麻烦的是,每次您在 Access 97 中运行查询时,它都会提示您使用数据库连接对话框。

MS Excel 与 MS Query 结合使用可能提供更好的解决方案。它会通过每个查询。如果我知道要将它们公开,我会尽量避免使用更奇特的类型。

4.3) 如何使用行版本控制 - 或者 - 为什么我会收到有关 xid 和 int4 没有运算符的消息?

某些版本的 PostgreSQL 缺少一些运算符(有人记得是哪些版本吗?),因此为了使用行版本控制,您必须重载 int4eq 函数以用于 xid 类型。此外,您还需要创建一个运算符来比较 xid 和 int4。您必须对每个要使用此功能的数据库执行此操作。这在 PostgreSQL 6.4 中可能不再需要,因为它将被添加。以下是详细信息。

    create function int4eq(xid,int4)
        returns bool
        as ''
        language 'internal';

    create operator = (
        leftarg=xid,
        rightarg=int4,
        procedure=int4eq,
        commutator='=',
        negator='<>',
        restrict=eqsel,
        join=eqjoinsel
    );
    

4.4) 我可以使用大对象或 OLE 吗?

大对象在驱动程序中映射到 LONGVARBINARY,以便允许在 Microsoft Access 中存储诸如 OLE 对象之类的东西。通常使用多个 SQLPutData 和 SQLGetData 调用来发送和检索这些对象。驱动程序创建一个新的对象,并将它的“标识符”插入到相应的表中。但是,由于 PostgreSQL 使用“Oid”来标识大对象,因此有必要创建一个新的 PostgreSQL 类型,以便能够区分普通 Oid 和大对象 Oid。在该新类型成为 PostgreSQL 的正式部分之前,必须将其添加到所需的数据库中,并在每次连接时进行查找。驱动程序中使用的类型简单地称为“lo”,以下是用于创建它的命令。

    create type lo (
        internallength=4,
        externallength=10,
        input=int4in,
        output=int4out,
        default='',
        passedbyvalue
    );

    create table employee (
        id integer,
        name varchar(30),
        picture lo
    );
    

完成此操作后,只需使用新的“lo”类型来定义该数据库中的列即可。当驱动程序看到“lo”类型时,它将将其处理为 SQL_LONGVARBINARY。

另一个重要的注意事项是,这种新类型缺乏功能。它不会在更新和删除后自行清理,从而导致孤儿对象存在并占用额外的磁盘空间。目前,PostgreSQL 不支持对大对象的清理。

编写一个临时的独立清理过程,以便在服务器上以一定间隔运行,并不太难。只需在 pg_attribute 中搜索 lo 数据类型列,并通过查询包含 lo 的每个表来构建一个 lo 列表。然后将此列表与 pg_class 中的 xinv.* 进行比较。没有指针的 xinv.* 是孤儿对象,应该被删除。

希望将来,真正的对象数据类型将作为基本类型提供。但目前,将 Word 文档、Visio 文档或跳舞婴儿的 AVI 存储到数据库列中确实很有趣,即使您最终会填满服务器的硬盘!

4.5) 为什么 PostgreSQL 后端在浏览带主键的表时抱怨内存不足?

Jet 数据库引擎(Access 使用)和其他引擎可以使用“键集”来访问记录。根据键中部分的数量,性能可能从缓慢到后端崩溃不等。以下是一个使用 10 行(典型的键集数量)的键集查询

    -- This is a 3 part key

    select ... from foo where
        (v1 = "?" AND v2 = "?" AND v3 ="?") OR -- line 1
        (v1 = "?" AND v2 = "?" AND v3 ="?") OR -- line 2
    ...
        (v1 = "?" AND v2 = "?" AND v3 ="?") OR -- line 9
        (v1 = "?" AND v2 = "?" AND v3 ="?")    -- line 10
    

问号将被键值替换

在 PostgreSQL 6.4 之前,这是一个主要问题。但截至 6.4,至少有 2 个修复程序可以解决此问题。其中一个修复程序称为 KSQO(键集查询优化)。从 6.4 开始,驱动程序现在默认情况下启用此功能,尽管可以在高级驱动程序选项设置中更改此功能。

4.6) 如何让我的应用程序识别主键?

SQLPrimaryKeys() 在驱动程序中实现。驱动程序查询系统表以查找名为“{table}_pkey”的唯一索引。例如

    create table foo (
        id integer primary key,
        data varchar(20)
    );
    

5) Borland 应用

5.1) 哪些驱动程序/数据源选项适用于 Borland 产品?

如果使用 Borland,请考虑设置以下高级驱动程序选项

5.1) 为什么 varchar/char 数据类型在 Borland DBExplorer 中没有显示正确的精度 - 或者 - 为什么所有 varchar/char 精度都显示为 128?

使用 6.4 协议时,此问题应该不会出现。

在 PostgreSQL 6.4 协议之前,后端不会在查询结果中返回 varchar/char 数据类型的尺寸,而 Borland 严重依赖此功能来进行简单查询和数据字典导入。因此,开发了几个驱动程序选项来帮助解决此问题。

目前,如果启用了解析语句选项,解析器将回退到执行语句,如果它无法处理特定列。因此,最好将未知大小也设置为“最长”。

6) Microsoft 应用

6.1) 为什么基于 int4 的聚合函数似乎不起作用?

一些聚合函数,如 sum(int4) 和 avg(int4),使用数值数据类型返回结果。根据 SQL 规范,这是完全合法的,这样做是为了防止溢出和其他问题,但不幸的是,微软的 ActiveX 数据对象似乎不喜欢它。有两种解决方法

6.2) 为什么 Access 每次运行我的 SQL 直通查询时都强制我指定数据源?

可以在查询属性中指定数据源,这样它就不会每次都询问你。在视图菜单下,选择属性。对于“ODBC 连接字符串”属性,在“ODBC;”之后添加“DSN=<你的数据源名称>”。你也可以添加其他属性,例如“ODBC;DSN=my_dsn;UID=me;PWD=test”。

6.3) 为什么 MS Access 有时会抱怨 GROUP BY 或 ORDER BY 不在目标列表中?

此消息来自 PostgreSQL 后端。PostgreSQL 目前要求 ORDER BY 和 GROUP BY 子句中的字段包含在目标列表中。但是,此限制已在 PostgreSQL 6.4+ 中解除。

Access 所基于的旧版 Microsoft Jet 数据库引擎存在一些问题,会导致这种情况。即使你没有对任何内容进行排序,Access 也会坚持在联接查询中添加一个 order by 子句。即使使用 PostgreSQL 6.4+,查询可能不再出错,但它会以你可能不希望的方式排序,并且无法更改它。要解决此问题,你需要将 Jet 数据库引擎更新到 3.51 版。它可以从微软免费获得。点击 这里 从微软支持网站下载最新的 Jet 引擎。

6.4) 为什么我在 Access 2000 及更高版本中收到“写入冲突 - 此记录自您开始编辑以来已被其他用户更改”的错误?

由 Michael Zedeler ([email protected]) 贡献

如果你收到以下消息:“写入冲突 - 此记录自您开始编辑以来已被其他用户更改。[...]”来自 Access 2000,这很可能是由于 Access 和 PostgreSQL 之间的标准不同而产生的问题。

从旧时起,根据一些 SQL 标准,空字符串被定义为等于 NULL。这种规定多年来引发了许多问题,因此 PostgreSQL 为了纠正这种情况,偏离了标准。在 PostgreSQL 中,NULL 就是 NULL,空字符串就是空字符串。

因此,当 Access 从 PostgreSQL 中检索包含空字符串的字段的行时,它会自动将它们转换为 NULL 值。当您尝试更新此行时,从 Access 2000 发送到 PostgreSQL 的查询将无法更新该行。以下是一个例子:

您已将以下行插入到表 a 中:

        id  | name----+-------------------------  1 | <- contains the empty string. Not NULL.
    

然后,您使用 Access 2000 检索该行,随后在 "name" 字段中插入值 "Smartypants"。

您可能期望 Access 2000 向 PostgreSQL 发送以下查询:

UPDATE a SET name = 'Smartypants' WHERE id = 1 AND name = ''

(添加 "AND name = ''" 是为了避免在其他用户已经更新了该行的情况下进行更新。)

但 Access 2000 实际发送的是:

UPDATE a SET name = 'Smartypants' WHERE id = 1 AND name IS NULL

该查询失败,因为 PostgreSQL 没有将 NULL 视为空字符串。

如何解决问题

我还没有找到任何解决方法,只能停止在字符字段中使用空字符串。

这个问题只会在其他系统将数据插入 PostgreSQL 表时出现,因此您必须让这些系统在必要时开始使用 NULL 而不是空字符串。当 Access 2000 插入数据时,它将始终将空字符串转换为 NULL,从而保持与(旧的?)SQL 标准一致的数据。

PostgreSQL 7.2 及更高版本可能会导致类似的问题,但原因不同

由 Sam Hokin ([email protected]) 贡献

新的 PostgreSQL 时间戳数据类型默认使用微秒精度。这意味着时间戳值存储为 2002-05-22 09:00:00.123456-05 的形式。但是,Access 不支持额外的精度,因此 Access 使用的值为 2002-05-22 09:00:00-05。当尝试更新记录时,会收到上述错误消息,因为 Access 在其 UPDATE 查询中使用的值与 PostgreSQL 表中的值不匹配,类似于本 FAQ 条目中已报告的 NULL 与空字符串冲突。

如何解决问题

简单的解决方法是使用 timestamp(0) 而不是 timestamp。否则,必须确保所有插入 PostgreSQL 表的时间戳值都具有零小数秒值。

顺便说一下,这个问题在 Access 97 和 Access 2000 中都会出现。

由史蒂文·西特龙-普斯蒂 ([email protected]) 贡献

解决 access2k 和 7.2 中提到的问题的另一种方法是使用一个查询,该查询在您的数据视图后面,并排除时间戳列。在我们的案例中,时间戳是自动生成的,所以我们甚至不需要看到它们。因此,如果您不需要编辑时间戳值,请通过创建不包含数据值的查询来隐藏该列。

6.5) 使用 MS Access 时,为什么我无法对文本字段建立索引?或者,为什么我在定义索引或关系时收到“无效字段定义 'field'”错误?

文本字段默认映射到 SQL_LONGVARCHAR。因此,MS Access 将这些列视为“备忘录”类型。好消息是,您可以在文本列中存储高达 PostgreSQL 块大小限制的数据。PostgreSQL 在 7.1 版本之前有一个不到 8k 的元组限制,其中包括一个名为 TOAST 的新功能,该功能允许存储更大的字符串。

您可以通过取消选中数据类型选项下的高级驱动程序选项“文本作为 LongVarchar”来更改文本字段到 SQL_VARCHAR 的映射。这应该允许使用文本字段,但您将受到 varchar 最大大小的限制。

6.6) 使用 MS Access 时,为什么我无法对类型为“文本”的列进行 GROUP BY、ORDER BY 甚至 WHERE 操作?

文本字段默认映射到 SQL_LONGVARCHAR。因此,MS Access 将这些列视为“备忘录”类型。好消息是,您可以在文本列中存储高达 PostgreSQL 块大小限制的数据。PostgreSQL 在 7.1 版本之前有一个不到 8k 的元组限制,其中包括一个名为 TOAST 的新功能,该功能允许存储更大的字符串。

您可以通过取消选中数据类型选项下的高级驱动程序选项“文本作为 LongVarchar”来更改文本字段到 SQL_VARCHAR 的映射。这应该允许使用文本字段。

6.7) 使用 MS Access 时,为什么我在某些操作后在行中看到 #Deleted#?

如果您使用数字或 int8 (bigint) 列作为主键,则通常会出现这种情况。在 Access 中,Int 是一个 16 位值,Long Int 是一个 32 位值,这与 PostgreSQL 不同,在 PostgreSQL 中,int 是一个 32 位值,bigint 是一个 64 位值。Access 将 int8/numeric 键视为浮点值,它无法用作键。要解决此问题,如果您需要数字主键,请坚持使用 int4。有关更多信息,请参阅 Microsoft KB 文章 #128809

6.8) 在 64 位 Windows 上安装 psqlODBC

由马克·伍德 ([email protected]) 贡献

虽然您可以像往常一样在 Win X64 上安装 32 位 ODBC 驱动程序,但您无法通过普通的控制面板或 ODBC 数据源管理员配置 32 位 DSN。

如何在 Win x64 上配置 32 位 ODBC 驱动程序

从 **%SystemRoot%\syswow64\odbcad32.exe.  ** 配置 ODBC DSN。点击

   开始->运行
   输入:**%SystemRoot%\syswow64\odbcad32.exe**
   按回车键

这看起来与您可能从控制面板运行的驱动程序管理器相同,但用于管理 32 位驱动程序。如果您从 System32 目录运行 odbcad32.exe,实际上是在运行 64 位驱动程序管理器。

什么是 WOW64?
如果可能,我会删除其余信息,只包含指向有关 WOW64 的更多信息的链接 - 比如
http://msdn.microsoft.com/en-us/library/aa384274(v=VS.85).aspx 例如。

什么是 WOW64 以及为什么需要它
http://forums.techarena.in/operating-systems/1160164.htm

WoW64 代表“Windows on 64-bit Windows”,它包含所有用于兼容性的 32 位二进制文件,这些文件运行在
64 位 Windows 之上。所以,是的,它看起来像是 System32 中所有内容的双重副本(尽管目录名称如此,但实际上是 64 位二进制文件)。

如果您运行的是 32 位 Windows,那么找到这个 SysWoW64 目录有点奇怪...

WOW64 知道安装向导是在模拟器中运行的 32 位应用程序。它也知道 64 位和 32 位代码不能混合。因此,WOW64 模拟器为 \Windows\SysWOW64 文件夹创建了一个别名。这意味着,每当 32 位应用程序需要读取或写入 \Windows\System32 文件夹中的任何内容时,WOW64 模拟器都会透明地将请求重定向到 \Windows\SysWOW64 文件夹。

Microsoft 在 Windows Vista 64 位操作系统的 WoW(Windows on Windows)目录中提供了一组 32 位可执行文件。

要为 32 位应用程序设置 DSN,您必须使用:**%WINDIR%\SysWOW64\odbcad32.exe**

而对于 64 位应用程序,您必须使用:**%WINDIR%\System32\odbcad32.exe**

因此,要运行 32 位应用程序,我们需要修改 env PATH 变量并将 SysWOW64 放在 system32 之前。

大致步骤如下
1. 启动 **%windir%\SysWoW64\cmd.exe**
2. 设置 **PATH=%systemroot%\SysWOW64;%PATH%**
3. 运行应用程序。
4. 应用完成后,如果需要,请重置 PATH 变量。

希望这对你有所帮助。
或者,如果应用程序无法从 shell 中运行,则可以从系统属性 > 高级选项卡 > 环境变量 > 系统变量中直接修改 PATH 变量。
相应地编辑 PATH 变量并重新启动系统以使更改生效。

还可以查看相关的主题

* Adminpak SP2,Windows Server x64 SP2
<http://forums.techarena.in/windows-x64-edition/810091.htm>
* 需要帮助注册 DLL
<http://forums.techarena.in/windows-x64-edition/804399.htm>
* 证书服务 Web 界面和 Win2k3 x64/AMD64 版本
<http://forums.techarena.in/server-security/598973.htm>

使用 postgresql dbc msi 安装后,您预计注册表将显示的内容的文档

http://archives.postgresql.org/pgsql-interfaces/2001-01/msg00177.php

ftp.postgresql.org 上有两个版本的 ODBC 驱动程序:一个是包含安装程序的完整包,另一个只是驱动程序本身。
使用安装程序安装一次后,只需将新版本的驱动程序复制到 windows\system 即可进行升级。
如果由于某种原因您无法使安装程序正常工作,则可以使用 regedit 手动进行安装。

找到键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI 并添加以下内容

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL]
"Setup"="C:\\WINDOWS\\SYSTEM\\PSQLODBC.DLL"
"Driver"="C:\\WINDOWS\\SYSTEM\\PSQLODBC.DLL"
"APILevel"="1"
"ConnectFunctions"="YYN"
"CommLog"="0"
"Optimizer"="0"
"DriverODBCVer"="02.00"
"FileUsage"="0"
"SQLLevel"="1"
"UsageCount"=dword:00000001
"Fetch"="100"
"UniqueIndex"="1"
"ReadOnly"="0"
"UseCursors"="0"
"UnknownSizes"="0"
"TextAsLongVarchar"="0"
"UnknownsAsLongVarchar"="0"
"MaxVarcharSize"="254"
"MaxLongVarcharSize"="4094"
"ConnSettings"=""
"UseDeclareFetch"="0"
"BoolsAsChar"="0"
"ExtraSysTablePrefixes"="dd_;"
"Parse"="1"
"Ksqo"="1"
"CancelAsFreeStmt"="0"

(注意:检查系统中的上述路径)

找到键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers 并添加一个条目 "PostgreSQL= 已安装"。

来自 Mark Wood 的办公桌 ([email protected] ) 20100524