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
}