您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

Chapter 4. pgtcl - TCL 绑定库

Table of Contents
4.1. 介绍
4.2. pgtcl 装载到你的应用中
4.3. pgtcl 命令参考信息
pg_connect  --  打开一个到后端服务器的联接
pg_disconnect  -- 关闭一个与后端服务器的联接
pg_conndefaults  -- 获取关于缺省联接参数的信息
pg_exec  --  向服务器发送一个查询字串
pg_result  --  获取查询结果的信息
pg_select  -- 逐一处理一个 SELECT 语句的结果
pg_listen  -- 设置或者改变一个侦听异步 NOTIFY 消息的回调(函数)
pg_lo_creat  -- 创建一个大对象
pg_lo_open  -- 打开一个大对象
pg_lo_close  -- 关闭一个大对象
pg_lo_read  --  读取一个大对象
pg_lo_write  -- 写入一个大对象
pg_lo_lseek  -- 在一个大对象里定位到某个位置
pg_lo_tell  -- 返回一个大对象的当前(文件)指针位置
pg_lo_unlink  -- 删除一个大对象
pg_lo_import  -- 从一个文件输入一个大对象
pg_lo_export  -- 把一个大对象输出到一个文件中去.

4.1. 介绍

pgtcl 是一个用于前端和 PostgreSQL 后端交互的 Tcl 包.它把大多数 libpq 库的函数/功能做成可用于 Tcl 脚本.

这个包最初是 Jolly Chen 写的.

Table 4-1 给了我们一个在 pgtcl 里可用命令的概述. 这些命令在后面更多的内容里详细介绍.

Table 4-1. pgtcl 命令

命令 描述
pg_connect 打开一个与后端服务器的联接
pg_disconnect 关闭一个联接
pg_conndefaults 获取联接选项和其他缺省值
pg_exec 向后端发送一个查询
pg_result 操作查询的结果
pg_select 在一个 SELECT 语句的结果上循环(处理)
pg_listen 建立一个用于 NOTIFY 消息的回叫
pg_lo_creat 创建一个大对象
pg_lo_open 打开一个大对象
pg_lo_close 关闭一个大对象
pg_lo_read 读取一个大对象
pg_lo_write 写一个大对象
pg_lo_lseek 在一个大对象里搜索一个位置
pg_lo_tell 返回一个大对象的当前搜索位置
pg_lo_unlink 删除一个大对象
pg_lo_import 把一个 Unix 文件输入到一个大对象里
pg_lo_export 把一个大对象输出到一个 Unix 文件里

pg_lo_* 过程都是与 PostgreSQL 大对象特性交互的接口. 这些函数是仿照标准 Unix 文件系统接口的做法设计的. pg_lo_* 过程应该用于一个 BEGIN / COMMIT 事务块里头, 因为 pg_lo_open 返回的文件描述符只是在当前事务中有效. pg_lo_import pg_lo_export 必须 在一个 BEGIN / END 事务块里面使用.

Example 4-1 演示了一个如何使用这些过程的一个 小例子.

Example 4-1. pgtcl 例子程序

# getDBs :
#   get the names of all the databases at a given host and port number
#   with the defaults being the localhost and port 5432
#   return them in alphabetical order
#
#  获取给定主机和端口号上的所有数据库,缺省是 localhost 和端口 5432
#  并且按照字母顺序返回它们
#
proc getDBs { {host "localhost"} {port "5432"} } {
    # datnames is the list to be result
    set conn [pg_connect template1 -host $host -port $port]
    set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname"]
    set ntups [pg_result $res -numTuples]
    for {set i 0} {$i < $ntups} {incr i} {
    lappend datnames [pg_result $res -getTuple $i]
    }
    pg_result $res -clear
    pg_disconnect $conn
    return $datnames
}