perl スクリプトで PostgreSQL サーバにアクセスする

<--PostgreSQL メモへ戻る

perl で PostgreSQL サーバにアクセスする機能は Pg モジュールによって提供されている.

(私は Vine Linux を使っているので,Vine Plus の postgresql-perl-xxx を インストールすることで使えています.
そうでない人は,日本 PostgreSQL ユーザ会のページを参照して下さい. )

perl スクリプトでの基本的な使い方は,

(1)   Pg モジュールの使用を宣言
(2)   PostgreSQL サーバに接続
(3)   問い合わせの実行
(4)   結果の利用
である.
なお,サーバとの切断は,スクリプトの実行終了とともに自動的に行なわれる.

(1)   Pg モジュールの使用を宣言

use Pg;
と書くだけである.

(2)   PostgreSQL サーバに接続

$conn = Pg::connectdb("option1=value option2=value ...");

左辺の「$conn」が,この接続と一対一に対応した変数になり, これ以降のステップで利用される. 実際,変数名は何でもよいが, 以下の説明ではこれを用いているので注意されたい.

オプションとそのデフォルト値はそれぞれ以下のようになっている.
オプション デフォルト値
host localhost
port 5432
options ""(空文字列)
tty ""(空文字列)
dbname 現在のユーザ ID
user 現在のユーザ ID
password ""(空文字列)

例えば,ローカルホストで PostgreSQL サーバが起動しており, そこに bookmark というデータベースがあるとしよう. このデータベースにユーザ dbuser (パスワードなし)として接続するには,
$conn = Pg::connectdb("dbname=bookmark user=dbuser");
と書けば良い.(その他のオプションは,デフォルトのままで構わない.)

うまく接続できていることを確認するには,
$status = $conn->status;
を実行し,$status が定数 PGRES_CONNECTION_OK と等しいことを確かめるとよい.

(3)   問い合わせの実行

$result = $conn->exec("SQL 文");
問い合わせの結果はすべて「$result」を使ってアクセスできる. この名前も実際は何でもよい. ただし,以下ではこれを使って説明しているので注意されたい.

例えば,
$result = $conn->exec("select * from a_table;");
を実行すれば,a_table という表に格納してある全データが問い合わせの結果として $result に入れられる.

(4)   結果の利用

いま,(3)   問い合わせの実行 で得られた結果は, $result に格納してあるものとする.

各結果は「$result->○○」 でアクセスできる. ○○に入るものの一覧を以下に示す.
ntuples 結果における組の数
nfields 結果におけるフィールドの数
fname(フィールド番号) フィールド番号に対応するフィールド名
fnumber(フィールド名) フィールド名に対応するフィールド番号
fsize(フィールド番号) フィールド番号に対応するフィールドのサイズ(バイト数)
(可変長の場合は -1)
cmdTuples 最後に行なった問い合わせが INSERT コマンドか
DELETE コマンドであった場合,挿入/削除された
組の数を返す.
getvalue(組番号, フィールド番号) 組番号・フィールド番号に対応する位置の値

これらとは別に resultStatus を使って (つまり,$result->resultStatus として), 問い合わせの実行がうまくいったかどうかを調べることもできる. その際,以下の定数と比較することで状態を把握する.
PGRES_EMPTY_QUERY
PGRES_COMMAND_OK
PGRES_TUPLES_OK
PGRES_COPY_OUT
PGRES_COPY_IN
PGRES_BAD_RESPONSE
PGRES_NONFATAL_ERROR
PGRES_FATAL_ERROR


(C) 2000 - 2004 Hirohisa AMAN <aman@cs.ehime-u.ac.jp>