Chapter 3. pgtcl - Tcl 結合ライブラリ

Table of Contents
3.1. 序文
3.2. アプリケーションへの pgtcl のロード
3.3. pgtcl コマンドリファレンス情報
pg_connect -- バックエンドサーバとの接続を開きます。
pg_disconnect -- バックエンドサーバとの接続を閉じます。
pg_conndefaults -- デフォルトの接続パラメータについての情報を入手します。
pg_exec -- サーバへコマンド文字列を送信します。
pg_result -- 問い合わせ結果情報を入手します。
pg_select -- SELECT文の結果を繰り返し処理します。
pg_execute -- 問い合わせを送り、(オプションで) 結果を繰り返し処理します。
pg_listen -- 非同期通知メッセージ用のコールバックを設定または変更します。
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 -- ファイルからラージオブジェクトをインポートします。
pg_lo_export -- ラージオブジェクトをファイルにエキスポートします。

3.1. 序文

pgtclPostgreSQL サーバとインタフェースを持つクライアントプログラム用の Tcl パッケージです。 これにより、libpq のほとんどの機能を Tcl スクリプトで使用可能になります。

このパッケージは元々、Jolly Chen 氏により作成されました。

Table 3-1 において、pgtcl で使用できるコマンドの概要を説明しています。 これらのコマンドは以下でより詳細に説明されます。

Table 3-1. pgtcl コマンド

コマンド説明
pg_connectバックエンドサーバとの接続を開きます。
pg_disconnect接続を閉じます。
pg_conndefaults接続オプションとそのデフォルト値を入手します。
pg_exec問い合わせをバックエンドに送信します。
pg_result問い合わせの結果を操作します。
pg_selectSELECT文の結果を繰り返し処理します。
pg_execute問い合わせを送り、(オプションで) 結果を繰り返し処理します。
pg_listenNOTIFY メッセージ用のコールバックを確立します。
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_importUnix ファイルをラージオブジェクトにインポートします。
pg_lo_exportラージオブジェクトを Unix ファイルにエキスポートします。

pg_lo_*ルーチンは、PostgreSQL のラージオブジェクト機能へのインタフェースです。 それらの関数は標準的な Unix ファイルシステムインタフェース用のファイルシステム関数を真似して設計されています。 pg_lo_open で返されるファイル記述子が現在のトランザクションでのみ有効ですので、pg_lo_* ルーチンは BEGIN/COMMIT トランザクションブロック内で使用されなければなりません。 pg_lo_importpg_lo_export必ず BEGIN/COMMIT トランザクションブロック内で使用しなければなりません。

Example 3-1 で、このルーチンの使用方法を示す小さな例を示します。

Example 3-1. pgtcl プログラム例

# getDBs :
#   指定されたホストとポート番号における、全てのデータベースの名前をアル
#   ファベット順に取り出します。
#   デフォルトは、localhost と 5432 ポートです。
proc getDBs { {host "localhost"} {port "5432"} } {
    # datnames は結果となるリストです。
    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
}