↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.2 / 7.1
历史版本。 PostgreSQL 7.2 已结束支持。 请参阅 当前版本手册.

7.5. ApplixWare #

ApplixWare有一个至少在部分平台上受到支持的ODBC数据库接口。在 Linux 下,已经演示过 ApplixWare 4.4.2 通过 PostgreSQL发行版中包含的 psqlODBC驱动与 PostgreSQL 7.0 配合工作。

7.5.1. 配置

ApplixWare必须被正确配置,才能访问 PostgreSQL的ODBC 软件驱动。

启用ApplixWare数据库访问

这些说明针对的是Linux上的 ApplixWare 4.4.2 版。更详细的信息请参阅Linux Sys Admin在线图书。

  1. 你必须修改axnet.cnf,让 elfodbc能找到libodbc.so(ODBC驱动管理器)共享库。这个库随 ApplixWare发行版一起提供,但 axnet.cnf需要被修改为指向正确的位置。

    以 root 身份编辑文件 applixroot/applix/axdata/axnet.cnf。

    1. 在axnet.cnf的底部,找到以

      #libFor elfodbc /ax/...

    2. 把这一行改为

      libFor elfodbc applixroot/applix/axdata/axshlib/lib

      这会告诉elfodbc到这个目录中查找 ODBC支持库。通常 Applix安装在/opt,因此完整路径是 /opt/applix/axdata/axshlib/lib,但如果你把 Applix安装在了其他地方,请相应地修改路径。

  2. 按照第 7.3 节中的说明创建 .odbc.ini。你可能还想加上标志

    TextAsLongVarchar=0

    加到.odbc.ini的数据库特定部分,这样文本字段就不会显示为**BLOB**。

测试ApplixWare ODBC 连接

  1. 启动Applix Data

  2. 选择你感兴趣的PostgreSQL数据库。

    1. 选择Query → Choose Server。

    2. 选择ODBC,然后点击 Browse。你在.odbc.ini 中配置的数据库应该会被显示出来。确保Host: 字段为空(如果不为空,axnet会试图联系另一台机器上的axnet来查找数据库)。

    3. 在Browse弹出的框中选择数据库,然后点击OK。

    4. 在登录标识对话框中输入用户名和口令,然后点击OK。

    你应该会在数据窗口左下角看到 Starting elfodbc server。如果你得到一个错误对话框,请参见下面的调试一节。

  3. “Ready”消息会出现在数据窗口左下角。这表示你现在可以输入查询了。

  4. 从Query → Choose tables中选择一张表,然后选择 Query → Query 来访问数据库。表中前 50 行左右应该会出现。

7.5.2. 常见问题

在试图通过Applix Data建立 ODBC连接时可能出现下列消息:

Cannot launch gateway on server

elfodbc找不到libodbc.so。检查你的axnet.cnf。

Error from ODBC Gateway: IM003::[iODBC][Driver Manager]Specified driver could not be loaded

libodbc.so找不到 .odbc.ini中列出的驱动。核对设置。

Server: Broken Pipe

驱动进程由于某种其他问题已经终止。你可能没有最新版本的 PostgreSQL ODBC包。

setuid to 256: failed to launch gateway

ApplixWare 4.4.1 的九月版(第一个在 Linux 下正式支持ODBC的版本)在用户名长度超过八(8)个字符时会出问题。问题描述由 Steve Campbell()提供。

作者

由 Steve Campbell()供稿,1998-10-20

axnet程序的安全系统看起来有点可疑。 axnet代表用户做事,在一个真正的多用户系统上它确实应该以 root 权限运行(这样它才能在每个用户的目录中读写)。不过我不太愿意推荐这样做,因为我们完全不知道这会打开什么安全漏洞。

7.5.3. 调试ApplixWare ODBC 连接

调试连接问题的一个好工具是 Unix 系统实用程序 strace。

用strace调试

  1. 启动ApplixWare。

  2. 对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

  3. 检查strace输出。

    来自 Cary 的提示

    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。

7.5.4. 运行ApplixWare演示

要完成ApplixWare Data Tutorial,你需要创建教程中引用的示例表。用于创建这些表的 ELF 宏试图在许多数据库列上使用 NULL 条件,而PostgreSQL 目前不允许这样做。

要绕开这个问题,你可以这样做:

修改ApplixWare演示

  1. 把/opt/applix/axdata/eng/Demos/sqldemo.am 复制到一个本地目录。

  2. 编辑这份sqldemo.am的本地副本:

    1. 搜索null_clause = "NULL"。

    2. 把它改为null_clause = ""。

  3. 启动Applix Macro Editor。

  4. 从Macro Editor中打开sqldemo.am文件。

  5. 选择File → Compile and Save。

  6. 退出Macro Editor。

  7. 启动Applix Data。

  8. 选择* → Run Macro。

  9. 输入值sqldemo,然后点击OK。

    你应该能在数据窗口的状态行(左下角)看到进度。

  10. 现在你应该可以访问演示表了。

7.5.5. 有用的宏

你可以把数据库登录和口令信息加到标准的 Applix启动宏文件中。下面是一个 ~/axhome/macros/login.am文件的例子:

macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro

小心

对于任何包含用户名和口令信息的文件,你都应当小心设置文件保护。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.