pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ApplixWare必须被正确配置,才能访问 Postgres的ODBC 软件驱动。
启用ApplixWare数据库访问
这些说明针对的是Linux上的 ApplixWare 4.4.1 版。更详细的信息 请参阅Linux Sys Admin在线图书。
你必须修改axnet.cnf,让 elfodbc能找到libodbc.so (ODBC驱动管理器)共享库。这个库随 ApplixWare 发行版一起提供,但axnet.cnf 需要被修改为指向正确的位置。
以 root 身份编辑文件 。applixroot/applix/axdata/axnet.cnf
在axnet.cnf的底部, 找到以
#libFor elfodbc /ax/...
把这一行改为
libFor elfodbc applixroot/applix/axdata/axshlib/lib
这会告诉elfodbc到这个目录中查找 ODBC支持库。 如果你把 applix 安装在了其他地方,请相应地修改路径。
Create .odbc.ini as 按照上面的说明创建。你可能还想加上标志
TextAsLongVarchar=0
加到.odbc.ini的数据库特定部分,这样文本 字段就不会显示为**BLOB**。
测试ApplixWare ODBC 连接
启动Applix Data
选择你感兴趣的Postgres数据库。
选择Query->Choose Server。
选择ODBC,然后点击Browse。 你在.odbc.ini中配置的数据库应该会被显示 出来。确保Host: field为空(如果不为空,axnet 会试图联系另一台机器上的 axnet 来查找数据库)。
在Browse弹出的框中选择数据库, 然后点击OK。
在登录标识对话框中输入用户名和口令, 然后点击OK。
你应该会在数据窗口左下角看到 “Starting elfodbc server”。如果你得到一个错误对话框, 请参见下面的调试一节。
'Ready'消息会出现在数据窗口左下角。这表示你现在可以输入 查询了。
从 Query->Choose tables 中选择一张表,然后选择 Query->Query 来访问数据库。表中前 50 行左右应该会出现。
在试图通过Applix Data建立 ODBC连接时可能出现下列消息:
elfodbc找不到libodbc.so。 检查你的axnet.cnf。
libodbc.so找不到 .odbc.ini中列出的驱动。核对设置。
驱动进程由于某种其他问题已经终止。你可能没有最新版本的 Postgres ODBC包。
ApplixWare v4.4.1 的九月版(第一个在 Linux 下正式支持 ODBC的版本)在用户名长度超过 八(8)个字符时会出问题。问题描述由 Steve Campbell提供。
由Steve Campbell 于 1998-10-20 供稿。
axnet程序的安全系统看起来有点可疑。 axnet代表用户做事,在一个真正的多用户 系统上它确实应该以 root 权限运行(这样它才能在每个用户的目录中 读写)。不过我不太愿意推荐这样做,因为我们完全不知道这会打开 什么安全漏洞。
调试连接问题的一个好工具是 Unix 系统实用程序 strace。
用strace调试
启动 applixware。
对 axnet 进程启动strace。例如,如果
ps -aucx | grep ax
显示
cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain
然后运行
strace -f -s 1024 -p 10432
检查 strace 输出。
ApplixWare的许多错误消息会发往 stderr,但我不确定stderr 被送到了哪里,所以strace是查明这一点的 手段。
例如,在得到“Cannot launch gateway on server”之后, 我对 axnet 运行了 strace,得到
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error)
所以发生的事情是 applix elfodbc 在搜索 libodbc.so 但找不到它。 这就是为什么需要修改 axnet.cnf。
要完成ApplixWare Data Tutorial,你需要创建 教程中引用的示例表。用于创建这些表的 ELF 宏试图在许多数据库列上 使用 NULL 条件,而Postgres目前不允许 这样做。
要绕开这个问题,你可以这样做:
修改ApplixWare演示
把/opt/applix/axdata/eng/Demos/sqldemo.am 复制到一个本地目录。
编辑这份sqldemo.am的本地副本:
搜索 'null_clause = "NULL"
把它改为 null_clause = ""
启动Applix Macro Editor。
从Macro Editor中打开 sqldemo.am 文件。
选择File->Compile and Save。
退出Macro Editor。
启动Applix Data。
选择*->Run Macro
输入值“sqldemo”,然后点击OK。
你应该能在数据窗口的状态行(左下角)看到进度。
现在你应该可以访问演示表了。
你可以把数据库登录和口令信息加到标准的 Applix 启动宏文件中。 下面是一个~/axhome/macros/login.am文件的例子: ======= ApplixWare必须被正确配置,才能访问 Postgres的ODBC 软件驱动。
启用ApplixWare数据库访问
注意, 这些说明针对的是Linux上的 ApplixWare 4.4.1 版。更详细的信息 请参阅Linux Sys Admin在线图书。
你必须修改axnet.cnf,让 elfodbc能找到libodbc.so (ODBC驱动管理器)共享库。这个库随 ApplixWare 发行版一起提供,但axnet.cnf 需要被修改为指向正确的位置。
以 root 身份编辑文件 。applixroot/applix/axdata/axnet.cnf
在axnet.cnf的底部, 找到以
#libFor elfodbc /ax/...
把这一行改为
libFor elfodbc applixroot/applix/axdata/axshlib/lib
这会告诉elfodbc到这个目录中查找 ODBC支持库。 如果你把 applix 安装在了其他地方,请相应地修改路径。
Create .odbc.ini as 按照上面的说明创建。你可能还想加上标志
TextAsLongVarchar=0
加到.odbc.ini的数据库特定部分,这样文本 字段就不会显示为**BLOB**。
测试ApplixWare ODBC 连接
启动Applix Data
选择你感兴趣的Postgres数据库。
选择Query->Choose Server。
选择ODBC,然后点击Browse。 你在.odbc.ini中配置的数据库应该会被显示 出来。确保Host: field为空(如果不为空,axnet 会试图联系另一台机器上的 axnet 来查找数据库)。
在Browse弹出的框中选择数据库, 然后点击OK。
在登录标识对话框中输入用户名和口令, 然后点击OK。
你应该会在数据窗口左下角看到 “Starting elfodbc server”。如果你得到一个错误对话框, 请参见下面的调试一节。
'Ready'消息会出现在数据窗口左下角。这表示你现在可以输入 查询了。
从 Query->Choose tables 中选择一张表,然后选择 Query->Query 来访问数据库。表中前 50 行左右应该会出现。
在试图通过Applix Data建立 ODBC连接时可能出现下列消息:
elfodbc找不到libodbc.so。 检查你的axnet.cnf。
libodbc.so找不到 .odbc.ini中列出的驱动。核对设置。
驱动进程由于某种其他问题已经终止。你可能没有最新版本的 Postgres ODBC包。
调试连接问题的一个好工具是 Unix 系统实用程序 strace。
用strace调试
启动 applixware。
对 axnet 进程启动strace。例如,如果
ps -aucx | grep ax
显示
cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain
然后运行
strace -f -s 1024 -p 10432
检查 strace 输出。
ApplixWare的许多错误消息会发往 stderr,但我不确定stderr 被送到了哪里,所以strace是查明这一点的 手段。
例如,在得到“Cannot launch gateway on server”之后, 我对 axnet 运行了 strace,得到
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error)
所以发生的事情是 applix elfodbc 在搜索 libodbc.so 但找不到它。 这就是为什么需要修改 axnet.cnf。
要完成ApplixWare Data Tutorial,你需要创建 教程中引用的示例表。用于创建这些表的 ELF 宏试图在许多数据库列上 使用 NULL 条件,而Postgres目前不允许 这样做。
要绕开这个问题,你可以这样做:
修改ApplixWare演示
把/opt/applix/axdata/eng/Demos/sqldemo.am 复制到一个本地目录。
编辑这份sqldemo.am的本地副本:
搜索 'null_clause = "NULL"
把它改为 null_clause = ""
启动Applix Macro Editor。
从Macro Editor中打开 sqldemo.am 文件。
选择File->Compile and Save。
退出Macro Editor。
启动Applix Data。
选择*->Run Macro
输入值“sqldemo”,然后点击OK。
你应该能在数据窗口的状态行(左下角)看到进度。
现在你应该可以访问演示表了。
你可以把数据库登录和口令信息加到标准的 Applix 启动宏文件中。 下面是一个~/axhome/macros/login.am文件的例子:
macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro
对于任何包含用户名和口令信息的文件,你都应当小心设置文件保护。
psqlODBC已在Linux 上构建并测试过。有报告称在 FreeBSD 和 Solaris 上也成功了。 对于其他已经支持Postgres的平台, 基本代码没有已知的限制。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。