pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ApplixWare有一个至少在部分平台上受到支持的ODBC数据库接口。在 Linux 下,已经演示过 ApplixWare 4.4.2 通过 PostgreSQL发行版中包含的 psqlODBC驱动与 PostgreSQL 7.0 配合工作。
ApplixWare必须被正确配置,才能访问 PostgreSQL的ODBC 软件驱动。
启用ApplixWare数据库访问
这些说明针对的是Linux上的 ApplixWare 4.4.2 版。更详细的信息请参阅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安装在/opt,因此完整路径是 /opt/applix/axdata/axshlib/lib,但如果你把 Applix安装在了其他地方,请相应地修改路径。
按照第 7.3 节中的说明创建 .odbc.ini。你可能还想加上标志
TextAsLongVarchar=0
加到.odbc.ini的数据库特定部分,这样文本字段就不会显示为**BLOB**。
测试ApplixWare ODBC 连接
启动Applix Data
选择你感兴趣的PostgreSQL数据库。
选择 → 。
选择,然后点击 。你在.odbc.ini 中配置的数据库应该会被显示出来。确保Host: 字段为空(如果不为空,axnet会试图联系另一台机器上的axnet来查找数据库)。
在弹出的框中选择数据库,然后点击。
在登录标识对话框中输入用户名和口令,然后点击。
你应该会在数据窗口左下角看到 Starting elfodbc server。如果你得到一个错误对话框,请参见下面的调试一节。
“Ready”消息会出现在数据窗口左下角。这表示你现在可以输入查询了。
从 → 中选择一张表,然后选择 → 来访问数据库。表中前 50 行左右应该会出现。
在试图通过Applix Data建立 ODBC连接时可能出现下列消息:
Cannot launch gateway on serverelfodbc找不到libodbc.so。检查你的axnet.cnf。
Error from ODBC Gateway: IM003::[iODBC][Driver Manager]Specified driver could not be loadedlibodbc.so找不到 .odbc.ini中列出的驱动。核对设置。
Server: Broken Pipe驱动进程由于某种其他问题已经终止。你可能没有最新版本的 PostgreSQL ODBC包。
setuid to 256: failed to launch gatewayApplixWare 4.4.1 的九月版(第一个在 Linux 下正式支持ODBC的版本)在用户名长度超过八(8)个字符时会出问题。问题描述由 Steve Campbell(<scampbell@lear.com>)提供。
由 Steve Campbell(<scampbell@lear.com>)供稿,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 条件,而PostgreSQL 目前不允许这样做。
要绕开这个问题,你可以这样做:
修改ApplixWare演示
把/opt/applix/axdata/eng/Demos/sqldemo.am 复制到一个本地目录。
编辑这份sqldemo.am的本地副本:
搜索null_clause = "NULL"。
把它改为null_clause = ""。
启动Applix Macro Editor。
从Macro Editor中打开sqldemo.am文件。
选择 → 。
退出Macro Editor。
启动Applix Data。
选择 → 。
输入值sqldemo,然后点击。
你应该能在数据窗口的状态行(左下角)看到进度。
现在你应该可以访问演示表了。
你可以把数据库登录和口令信息加到标准的 Applix启动宏文件中。下面是一个 ~/axhome/macros/login.am文件的例子:
macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro
对于任何包含用户名和口令信息的文件,你都应当小心设置文件保护。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。