[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > 其它 > 正文
PostgreSQL7.0手冊-接口-55. pgtcl - TCL 綁定庫
編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 23:25:51)
第五十五章. pgtcl - TCL 綁定庫
內容 
命令 
例子 
pgtcl 命令參考信息 
pgtcl 是一個用前端和 Postgres 端交互的 tcl 包.它把大多數 libpq 庫的函數/功能做成可用 tcl 腳本. 
  
這個包最初是 Jolly Chen 寫的. 
命令
表 55-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* 過程都是與 Postgres 大對象特性交互的接口.這些函數是仿照標準 Unix 文件系統接口的做法設計的.pg_lo* 過程應該用一個 BEGIN/END 事務塊裡頭,因為 pg_lo_open 返回的文件描述符只是在當前事務中有效.pg_lo_import 和 pg_lo_export 必須在一個 BEGIN/END 事務塊裡面使用.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

例子
這是一個如何使用這些過程的一個小例子: 
# 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
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
}

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pgtcl 命令參考信息

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_connect
名稱
pg_connect  打開一個到端服務器的聯接 

語法
pg_connect -conninfo connectOptions
pg_connect dbName [-host hostName]
  [-port portNumber] [-tty pqtty]
  [-options optionalBackendArgs]
輸入 (新風格)
connectOptions 
一個聯接選項字符串,每個(選項)都以形式 keyword = value 書寫. 

輸入 (舊風格)
dbName 
聲明一個有效數據庫名. 
[-host hostName] 
聲明數據庫 dbName 所在端服務器的名稱. 
[-port portNumber] 
聲明數據庫 dbName 所在端服務器的 IP 端口號. 
[-tty pqtty] 
聲明端來的調試輸出的可選文件或者控制台(tty). 
[-options optionalBackendArgs] 
聲明數據庫 dbName 所在端服務器的選項. 

輸出
dbHandle 
成功時,返回一個數據庫聯接的句柄.句柄以前綴 "pgsql" 開頭. 

描述
pg_connect 打開一個與 Postgres 端的聯接. 
兩種語法都可用.舊風格裡面每個可能的選項都在 pg_connect 語句裡用一個選項開關分隔.在新風格裡,可以用一個選項字符串包含多個選項值.參閱 pg_conndefaults 獲取關新風格的可用的選項信息.

用法
XXX thomas 1997-12-24

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_disconnect
名稱
pg_disconnect  關閉一個與端服務器的聯接 

語法
pg_disconnect dbHandle
Inputs
dbHandle 
聲明一個有效的數據庫句柄. 

輸出
無 
描述
pg_disconnect 關閉一個與端 Postgres 服務器的聯接.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_conndefaults
名稱
pg_conndefaults  獲取關缺省聯接參數的信息 

語法
pg_conndefaults
輸入
無. 

輸出
option list 
結果是一個描述可能的聯接選項和它們的當前值的列表.列表中每個元素是一個下面格式的子列表: 
  
  

{optname label dispchar dispsize value}

這裡 optname 可以用為 pg_connect -conninfo 裡的選項. 

描述
pg_conndefaults 返回關聯接的在 pg_connect -conninfo 裡可用的聯接選項的信息和當前每個選項的缺省值.
用法
pg_conndefaults

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_exec
名稱
pg_exec  向端發送一個查詢字串 

語法
pg_exec dbHandle queryString
輸入
dbHandle 
聲明一個有效的數據庫句柄. 
queryString 
聲明一個有效的 SQL 查詢. 

輸出
resultHandle 
如果 Pgtcl 不能獲得端返回,將返回一個 Tcl 錯誤.否則,一個查詢對象將被創建並且返回一個該對象的句柄.這個句柄可以傳遞給 pg_result 獲取查詢的結果. 
描述
pg_exec 向 Postgres 端提交一個查詢並且返回一個結果.查詢結果句柄以聯接句柄開頭並且增加了一個句號和一個結果數量. 
注意沒有 Tcl 錯誤生成並不意味著查詢成功!一個端返回的錯誤信息將被當作帶有失敗狀態的查詢結果進行處理,而不是在 pg_exec 裡生成一個 Tcl 錯誤.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_result
名稱
pg_result  獲取查詢結果的信息 

語法
pg_result resultHandle resultOption
輸入
resultHandle 
查詢結果的句柄. 
resultOption 
聲明幾個可能選項之一. 

選項
-status 
結果的狀態. 
-error 
如果狀態標識錯誤時是錯誤信息;否則是一個空字符串. 
-conn 
生成結果的聯接. 
-oid 
如果命令是一個 INSERT,這裡是插入的記錄的 OID;否則是一個空字符串. 
-numTuples 
查詢返回的記錄個數. 
-numAttrs 
每條記錄的字段數目. 
-list VarName 
把結果賦與一個列表. 
-assign arrayName 
把結果賦予一個數組,使用預定的形式(tupno,attributeName). 
-assignbyidx arrayName ?appendstr? 
把結果賦予一個數組,用第一個字段的值和其余字段的名稱為鍵字.如果給出了 appendstr 那附加到每個鍵字上.簡而言之,除了第一個字段外每個記錄都存放到數組裡,使用預定的形式(firstFieldValue,fieldNameAppendStr). 
-getTuple tupleNumber 
返回列表裡指定的記錄的各個域.記錄數從零開始. 
-tupleArray tupleNumber arrayName 
以字段名為索引向數組 arrayName 裡存儲記錄字段,記錄數從零開始. 
-attributes 
返回一個記錄字段的名稱的列表. 
-lAttributes 
返回一個子列表的列表,{name ftype fsize} 用每條記錄字段. 
-clear 
清理查詢對象結果. 

輸出
由選定的選項決定的結果,如上所述. 

描述
pg_result 返回前面的一個 pg_exec 創建的查詢結果的信息. 
你可以保留查詢結果任意長的時間,但是在你對其處理完畢之,一定要通過執行 pg_result -clear 來釋放它們.否則,你就有一處內存泄露,而且 Pgtcl 最終將開始抱怨你創建了太多的查詢結果對象.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_select
名稱
pg_select  逐一處理一個 SELECT 語句的結果 

語法
pg_select dbHandle queryString
  arrayVar queryProcedure
輸入
dbHandle 
聲明一個有效的數據庫句柄. 
queryString 
聲明一個有效的 SQL 選擇查詢. 
arrayVar 
用存放返回記錄的數組變量. 
queryProcedure 
在每個找到的記錄上運行的過程. 

輸出
resultHandle 
返回的結果要是一個錯誤信息要是一個查詢結果的句柄. 

描述
pg_select 向 Postgres 端提交一個 SELECT 查詢,並且對結果裡的每個記錄執行一個給定的代碼段.queryString 必須是一個 SELECT 語句.任何其它東西都返回一個錯誤.arrayVar 變量是一個在循環中使用的數組名.對每個記錄,arrayVar 都被填充為記錄的字段值,使用字段名作為數組的索引.然執行 queryProcedure . 
用法
如果表 "table" 有字段 "control" 和 "name" (以及可能還有其他字段)下面的東西就能工作: 
        pg_select $pgconn "SELECT * from table" array {
                puts [format "%5d %s" array(control) array(name)]
        }

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_listen
名稱
pg_listen  設置或者改變一個偵聽異步 NOTIFY 消息的回調(函數) 

語法
pg_listen dbHandle notifyName callbackCommand
輸入
dbHandle 
聲明一個有效的數據庫句柄. 
notifyName 
聲明啟停偵聽(動作)的通知條件名稱. 
callbackCommand 
如果存在且非空,提供一個在匹配的通知到達時執行的命令字符串. 

輸出
無 
 
描述
pg_listen 創建,修改或取消一個對來自 Postgres 端的異步 NOTIFY 消息請求的偵聽.帶有 callbackCommand 參數時,建立請求或者已經存在的命令字串被代替.不帶 callbackCommand 參數時,取消前面一個請求. 
在一個 pg_listen 請求建立起來,當一個與給定名稱匹配的 NOTIFY 消息從端到達就執行聲明的命令字串.當任何Postgres 客戶應用發送一個引用該名稱的 NOTIFY 消息都會發生這個過程.(注意這個名字可以是,但又不必須是一個數據庫裡現存的關系.)命令行字串是從 Tcl 空閑循環運行的.那也是用 Tk 寫的應用的正常的空閑狀態.在非 Tk 的 Tcl 腳本裡,你可以執行 update 或 vwait 來導致進入空閑循環. 

你在使用 pg_listen 時不應該直接調用 SQL 語句 LISTEN 或 UNLISTEN.Pgtcl 替你使用那些語句.但是如果你想自己發送一個 NOTIFY 消息,用 pg_exec 調用 SQL NOTIFY 語句.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_creat
名稱
pg_lo_creat  創建一個大對象 

語法
pg_lo_creat conn mode
輸入
conn 
聲明一個有效的數據庫聯接. 
mode 
聲明大對象的訪問模式 

輸出
objOid 
創建的大對象的 oid (對象標識). 

描述
pg_lo_creat 創建一個倒轉大對象(Inversion Large Object ) 

用法
模式可以是任意 INV_READ,INV_WRITE,和 INV_ARCHIVE 的或(OR).或(OR)運算的分隔符是 "|". 
[pg_lo_creat $conn "INV_READ|INV_WRITE"]

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_open
名稱
pg_lo_open  打開一個大對象 

語法
pg_lo_open conn objOid mode
輸入
conn 
聲明一個有效的數據庫聯接. 
objOid 
聲明一個有效的大對象 oid (對象標識). 
mode 
聲明大對象的訪問模式 

輸出
fd 
一個可以用面 pg_lo* 過程的文件描述符. 

描述
pg_lo_open 打開一個轉置大對象(Inversion Large Object).
用法
模式可以是 "r","w",或 "rw".

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_close
名稱
pg_lo_close  關閉一個大對象 

語法
pg_lo_close conn fd
輸入
conn 
聲明一個有效的數據庫聯接. 
fd 
一個可以用面 pg_lo* 過程的文件描述符. 

輸出
無 

描述
pg_lo_close 關閉一個倒轉大對象.
用法

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_read
名稱
pg_lo_read  讀取一個大對象 

語法
pg_lo_read conn fd bufVar len
輸入
conn 
聲明一個有效的數據庫聯接. 
fd 
從 pg_lo_open 來的大對象的文件描述符. 
bufVar 
聲明一個有效的緩沖區變量用以包含大對象數據段. 
len 
聲明大對象數據段允許的最大尺寸. 

輸出
無 

描述
pg_lo_read 從一個大對象讀取最多 len 字節到名為 bufVar 的變量中. 

用法
bufVar 必須是一個有效的變量名.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_write
名稱
pg_lo_write  寫入一個大對象 

語法
pg_lo_write conn fd buf len
輸入
conn 
聲明一個有效的數據庫聯接. 
fd 
從 pg_lo_open 來的大對象的文件描述符. 
buf 
聲明一個有效的字符串變量用寫入大對象. 
len 
聲明要寫入的字符串的最大尺寸. 

輸出
無 

描述
pg_lo_write 從一個變量 buf 向一個大對象寫入至多 len 字節. 

用法
buf 必須是實際要寫的字符串,而不是一個變量名.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_lseek
名稱
pg_lo_lseek  在一個大對象裡定位到某個位置 

語法
pg_lo_lseek conn fd offset whence
輸入
conn 
聲明一個有效的數據庫聯接. 
fd 
從 pg_lo_open 來的大對象的文件描述符. 
offset 
聲明一個以零為基的字節數偏移量. 
whence 
起點(whence)可以是 "SEEK_CUR","SEEK_END",或 "SEEK_SET" 

輸出
無 

描述
pg_lo_lseek 把當前(文件)指針放到大對象開始偏移 offset 字節處.
用法
whence (起點)可以是 "SEEK_CUR","SEEK_END",或 "SEEK_SET".

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_tell
名稱
pg_lo_tell  返回一個大對象的當前(文件)指針位置 

語法
pg_lo_tell conn fd
輸入
conn 
聲明一個有效的數據庫聯接. 
fd 
從 pg_lo_open 來的大對象的文件描述符. 

輸出
offset 
一個零為基的字節數偏移量,可以用 pg_lo_lseek 輸入. 

描述
pg_lo_tell 返回以字節計的當前指針相對大對象起點的偏移 offset . 

用法

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_unlink
名稱
pg_lo_unlink  刪除一個大對象 

語法
pg_lo_unlink conn lobjId
輸入
conn 
聲明一個有效的數據庫聯接. 
lobjId 
大對象的標識.XXX 是否與其他調用裡的 objOid (對象標識)一樣呢?? - thomas 1998-01-11 

輸出
無 

描述
pg_lo_unlink 刪除聲明的大對象. 

用法

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_import
名稱
pg_lo_import  從一個 Unix 文件輸入一個大對象 

語法
pg_lo_import conn filename
輸入
conn 
聲明一個有效的數據庫聯接. 
filename 
Unix 文件名. 

輸出
無 XXX 這裡是否返回一個 lobjId? 是否與其他調用裡的 objOid (對象標識)一樣呢? thomas - 1998-01-11 

描述
pg_lo_import 讀取聲明的文件並且把其內容放到一個大對象中. 

用法
pg_lo_import 必須在一對 BEGIN/END 事務塊中調用.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

pg_lo_export
名稱
pg_lo_export  把一個大對象輸出到一個 Unix 文件中去. 

語法
pg_lo_export conn lobjId filename
輸入
conn 
聲明一個有效的數據庫聯接. 
lobjId 
大對象標識.XXX 是否與其他調用裡的 objOid(對象標識)一樣呢?? thomas - 1998-01-11 
filename 
Unix 文件名. 

輸出
無 XXX 這裡是否返回一個 lobjId?是否與其他調用裡的 objOid (對象標識)一樣呢?thomas - 1998-01-11 

描述
pg_lo_export 把聲明的大對象寫入到一個 Unix 文件中去. 

用法
pg_lo_export 必須在一對 BEGIN/END 事務塊中調用. 

--------------------------------------------------------------------------------

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PostgreSQL7.0手冊-附錄-文檔 (2001-04-21 23:50:44)
PostgreSQL7.0手冊-附錄-日期/時間支持-CVS 倉庫 (2001-04-21 23:48:48)
PostgreSQL7.0手冊-教程 -73. Postgres SQL 高級特性 (2001-04-21 23:45:36)
PostgreSQL7.0手冊-教程 -72. 查詢語言 (2001-04-21 23:44:40)
PostgreSQL7.0手冊-教程 -71. 開始 (2001-04-21 23:42:54)
PostgreSQL7.0手冊-教程 -70. 體系結構 (2001-04-21 23:41:58)
PostgreSQL7.0手冊-教程 -69. SQL (2001-04-21 23:41:23)
PostgreSQL7.0手冊-開發者手冊 -68. 分頁文件 (2001-04-21 23:39:22)
PostgreSQL7.0手冊-開發者手冊 -67. 端接口 (2001-04-21 23:38:34)
PostgreSQL7.0手冊-開發者手冊 -66. gcc 缺省優化 (2001-04-21 23:37:20)

===更多相關===
 

★  樊強制作 歡迎分享  ★