pgtcl 是一个用于前端和 PostgreSQL 后端交互的 Tcl 包.它把大多数 libpq 库的函数/功能做成可用于 Tcl 脚本.
这个包最初是 Jolly Chen 写的.
Table 3-1 给了我们一个在 pgtcl 里可用命令的概述. 这些命令在后面更多的内容里详细介绍.
Table 3-1. pgtcl 命令
| 命令 | 描述 |
|---|---|
| pg_connect | 打开一个与后端服务器的联接 |
| pg_disconnect | 关闭一个联接 |
| pg_conndefaults | 获取联接选项和其他缺省值 |
| pg_exec | 向后端发送一个查询 |
| pg_result | 操作查询的结果 |
| pg_select | 在一个 SELECT 语句的结果上循环(处理) |
| pg_execute | 在结果上发送一个查询和可选的循环 |
| pg_listen | 建立一个用于 NOTIFY 消息的回叫 |
| pg_on_connection_loss | 为以外的连接丢失建立一个回叫 |
| 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 3-1 演示了一个如何使用这些过程的一个 小例子.
Example 3-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
}