↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.2 / 7.1
历史版本PostgreSQL 7.2 已于 2007 年 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

小心

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

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。