📄 postgresql-howto.txt
字号:
O'Reilly and Associates 出版的书。 通信论坛 Ted Lemon 总共管理三个 DBI 的通信论坛。它们都可在万维网上订阅 或取消 订阅∶ * 通信论坛 [109]http://www.fugue.com/dbi 这些可加入的论坛是∶ dbi-announce 这通信论坛只是作出宣布。如果你不能成功使用以上网址的表格, 请循以下途径订阅这论坛∶ * 电邮∶ [110]dbi-announce-request@fugue.com 内容‘subscribe’ dbi-dev 这通信论坛目的是让开发人员讨论有关 DBI 介面、API 和驱动程式机制 的意见和概念。只对开发人员或有兴趣的人有用。如果你不能成功使用以上网址 的表格,请循以下途径订阅这论坛∶ * 电邮∶ [111]dbi-dev-request@fugue.com 内容为‘subscribe’ dbi-users 这通信论坛是用作错误报告、问题讨论和一般问题。如果你不能成功 使用以上网址的表格,请循下途径订阅这论坛∶ * 电邮∶ [112]dbi-users-request@fugue.com 内容为‘subscribe’ 通信储存处 (Mailing List Archives)∶ * 美国通信储存处 [113]http://outside.organic.com/mail-archives/dbi-users/ * 欧洲通信储存处 [114]http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Int erest 编译错误或「测试失败」 如果发生讯息转储 (core dump),尝试使用 Devel::CoreStack 模组来产生讯息 转储的堆叠追踪 (stack trace)。Devel::CoreStack 可在 CPAN 找到∶ * [115]http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack 把堆叠追踪、模组版本、perl 版本、测试个案、操作系统版本及任何其他适用的 资料电邮到 dbi-users 通信论坛。寄出的资料越齐全,开发人员越快解决问题。 如果你不告诉我们,不要期望得到答案。 视窗 95/NT 有没有 DBI 支援? DBI 和 DBD::Oracle 的 Win32 版本已成为 DBI 的标准部分。因此,比 DBI 0.81 高的版本应该会正常运作。透过 ODBC,你可以存取微软 Access 和 SQL-Server 资料库。在 DBI-0.79(及以後)有一个实验性质的 Win32::ODBC DBI 模拟层。它名为 DBI::W32ODBC。你需要使用 Win32::odbc 模组。 * Win32 DBI [116]http://www.hermetica.com/technologia/perl/DBI/win32 * Win32 ODBC [117]http://www.roth.net 何谓 DBM?为何要用 DBI? UNIX 原本是使用简单以档案为基础的「资料库」,即 dbm 系统。dbm 容许你在 档案快速地存取资料。不过,它有数个严重的缺点。 档案封锁 (File Locking) dbm 系统不容许特别全面的档案封锁能力,也没有修正同时写入资料库引起的问 题的能力。 随意的资料结构 dbm 系统只容许单一固定的资料结构∶链-数值对 (key-value pair)。那数值可 以是复杂的物件,如一个 C 的 struct,但链必须是独一无二的。这对 dbm 系统 的用途造成很大限制。 不过,dbm 系统仍为使用简单资料及资源有限的用家提供了有用的功能,因为它 快速、全面及经过极严谨的测试。存取 dbm 系统的模组现已经 AnyDBM_File 模 组整合到 Perl 的核心散布中。 总括一句,对近乎是唯读的资料库或小型而简单的资料来说,dbm 是一个非常令 人满意的解决方法。不过,对更强大和可增减 (scalable) 的资料集来说,用家 最好使用 DBI。至於全面的交易封锁 (transactional locking),就更不用说了 。□ DBI 是否支援<这项功能>? 根据所提出的功能是一个并不标准,而只为部分资料库所独有的假设,答案是否 。 DBI 反映一个通用而可在大部分资料库使用的 API,而没有资料库独有的功能。 不过,如果驱动程式的作者有兴趣,他们可以籍 DBI 介面所定义的 func method 来加上资料库独有的功能。命令稿的开发人员要注意籍 func methods 提 供的功能一般不能在不同资料库间移植。 对 CGI 来说,dbi 有没有用? 一个字∶有!DBI 对 CGI 程式设计非常有用!事实上,CGI 是 DBI 最重要的用 途之一。 DBI 让 CGI 程式设计师设计功能强大的互联网前端资料库给他们的用家,从而提 供大量按次序排列的资料。DBI 也容许在网站的资料库伺服器超过负荷时,管理 人员在无须更改 CGI 命令稿的情况下将之升级。 我如何加快 CGI 与 DBD Oracle 的连接速度? Apache httpd 管理一组子 httpd (httpd children) 来服务客户。籍著 Doug MacEachern 的 Apache mod_perl 模组,perl 翻译器已嵌入到子 httpd 中 。CGI、DBI 和你喜欢的模组会在儿子诞生时载入。这些模组直到在磁碟上的版本 被更改时才会再被载入。要知道更多有关 Apache 的资料,请看 Apache 计划的 网站∶ * Apache 计划的网站 [118]http://www.apache.org * Mod_perl 模组 [119]http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl 如何使 DBI 和 CGI 持续连接? 籍著 Edmund Mergl 的 Apache::DBI 模组,每个子 httpd 会把资料库登入储存 在杂凑 (hash) 中。如果你的应用程式只有一个资料库用家,每一个儿子都可开 始连连。目前,儿子之间并不会分享资料库连接。Apache::DBI 可从 CPAN 下载 ∶ * [120]http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI “我在指令行执行一个 perl 命令稿时,并无问题。不过,当我在 http 执行它时,它会 失败!”何解? 基本上,这很有可能是因为从指令行执行命令稿的使用者已把环境变数设定好, 以 DBD::Oracle 来说,即 $ORACLE_HOME, $ORACLE_SID 或 TWO_TASK。httpd 行 程通常是以 nobody 的身份执行,即没有了设定好的环境。任何在这情况下尝试 执行的手稿都会正确地失败。要解决这问题,在你的命令稿的开头用一个 BEGIN() 区块设定环境。这样便会解决问题。同样地,你要检查你的 httpd 错误 纪录档以寻找线索,以及阅读“Idiot's Guide To Solving Perl / CGI Problems”和“Perl CGI Programming FAQ”以寻找更多资料。这问题大概不会 和 DBI 有关。请两份文件都小心阅读! * Idiot's Guide to Solving Perl / CGI problems [121]http://www.perl.com/perl/faq/index.html 使用 DBI 时,我能否进行多流处理 (multi-threading)? 目前不能。Perl 并不支援多流处理。不过,据估计,多流处理会成为 5.005 版 的基本散布的一部分,即不久之後,DBI 可能会支援多流处理。要看一些使用多 流 SELECT 句子的 Oracle OCI □例程式,请参阅∶ * [122]http://www.hermetica.com/technologia/oracle/oci/orathreads.ta r.gz 我如何用 DBI 呼叫内储程序 (stored procedure)? 假设你在目标资料库,例如一个 Oracle 资料库中建立了内储程序,你可使用 $dbh->do 来使程序立即执行。例如∶ $dbh->do( "BEGIN someProcedure END" ); 在 DBI 中,我如何取回内储程序的返回值? 记著还要检查错误! $sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" ); $sth->bind_param(1, $a); $sth->bind_param_inout(2, \$path, 2000); $sth->bind_param_inout(3, \$success, 2000); $sth->execute; 我可否用 DBI 来丢弃一个资料库? 对 DBI 来说,要适当地支援资料库的建立和丢弃太抽象了。例如,Oracle 根本 不支援丢弃资料库!此外,在 Oracle 中,资料库伺服器基本上就是资料库,但 在 mSQL,即使没有资料库,伺服器也能顺利地执行。这问题牵连太广了。正因如 此,部分驱动程式透过私家 func 方法来建立和删除资料库。你要检查驱动程式 的文件来了解它有没有支援这机制。 DBI 怎样处理 NULL 值? DBI 被指定把 NULL 值当作 undef 值处理。NULL 可以 NULL 的数值来加入到资 料库中,例如∶ $rv = $dbh->do( "INSERT INTO table VALUES( NULL )" ); 不过当查询时,NULL 要和 undef 比较。这是所有驱动程式都适用的标准。 这些 func 方法是做什麽的? DBI 把 func 方法定义为资料库独有功能的进入点,例如建立和丢弃一个资料库 。使用这些驱动程式独有方法十分简单,例如,要使用一个 createDatabase 方 法输入一个引数 (argument) ,我们会写∶ $rv = $dbh->func( 'argument', 'createDatabase' ); 软件开发人员要注意 func 方法不能在不同资料库间移植。 商业支援及训练 Perl5 资料库介面是自由软体。它并没有任何担保 (warranty)。不过,有些机构 提供了 DBI 的技术支援或培训计划。 PERL CLINIC : Perl Clinic 以合约形式为 Perl、DBI、DBD::Oracle 和 Oraperl 提供商业支援。这些支援是由 DBI 作者 Tim Bunce 工作的公司提供的 。欲知详情,请看∶ * [123]http://www.perl.co.uk/tpc 12. PostgreSQL 管理工具12.1 PGACCESS - PostgreSQL 管理的 GUI 工具 PgAccess 是 PostgreSQL 的 Tcl/Tk 介面。它已经包括在 PostgreSQL 的散布中 。你可能想从这网页找出它有没有新版本∶ * [124]http://www.flex.ro/pgaccess * 如有任何意见、改良的建议,欢迎电邮∶ [125]teo@flex.ro PgAccess 的特色 PgAccess 视窗□Main window, Table builder, Table(query) view, Visual query builder. Tables * 开启表格 (tables) 查阅,最多二百个纪录(可在 perferences 目录更改) * 籍拖曳垂直格线 (grid line) 重整大小(在列表空间 (table space) 比在 列表目录 (table header) 进行好) * 单格中自动换行□每个表dher 的配置独立储存 * 汇入/汇出其他档案格式(SDF、CSV) * 过滤功能(输入如 price>3.14 的过滤器) * 排序功能(自行输入需排序的栏位) * 即场编辑 * 改良了的表格产生助理 (table generator assistant) * 改良了的栏位编辑 Queries * 定义、编辑和储存“用家定义查询”(user defined queries) * 把查询储存作为显示 (views) * 查询的执行 * 观看 select 形式的查询结果 * 删除和更改查询名称 * 具拖曳和放下功能的 Visual query builder。如果你有安装 Netscape Navigator 的 Tcl/Tk 插件,你可在此看到它工作∶ (译按∶不知在哪?! ) 序列 (sequence) * 定义、删除和检查序列 函数 * 使用 SQL 语言定义、检查和删除函数 将来还会有以下改进 * 表格设计(增加栏位、更名等等) * 函数定义 * 报告产生器 * 基本的命令稿编写功能 如有意见、改良的提议,请电邮到∶ * [126]teo@flex.ro 有关 libgtcl 的资料 你会用到 PostgreSQL 到 Tcl 的介面程式库 libgtcl,所谓的 Tcl/Tk 可‘载入 ’模组。libpgtcl 和源程式码位於 PostgreSQL 的 /src/interfaces/libpgtcl 目录。特定来说,你需要一个可在 Tcl/Tk‘载入’的 libpgtcl 程式库。技术上 来说,它和普通的 PostgreSQL 可载入目的档并不相同,因为 libpgtcl 是一堆 目的档的集合。这档案在 Linux 名为 libpgtcl.so。 你可
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -