perl スクリプトで
PostgreSQL サーバにアクセスする
perl で PostgreSQL サーバにアクセスする機能は
Pg モジュールによって提供されている.
(私は Vine Linux を使っているので,Vine Plus の postgresql-perl-xxx を
インストールすることで使えています.
そうでない人は,日本 PostgreSQL ユーザ会のページを参照して下さい.
)
perl スクリプトでの基本的な使い方は,
↓
↓
↓
である.
なお,サーバとの切断は,スクリプトの実行終了とともに自動的に行なわれる.
(1) 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 が定数 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>