PgBashを CGIとして実行する場合、LD_LIBRARY_PATH環境変数に PostrgeSQLのライブラリパス名を指定する必要があります。apacheウェブサーバソフトの場合は、"httpd.conf"の先頭付近に次のように指定します。
SetEnv LD_LIBRARY_PATH /usr/local/pgsql/lib
次のコマンドをシェルスクリプトの先頭に指定します。
#!/usr/local/bin/pgbash
exec 2>&1 ............ (1)
echo "Content-type: text/html" ........................ (2)
echo ""
set EXEC_SQL_OPTION CGI; ......(3)
exec 2>1 は、標準エラー出力を標準出力に出力するための指定です。必須ではありませんが、bashが出力するエラーメッセージをホームページに表示することができます。
CGIとして使用するために、echo "Content-type: text/html"と echo ""は必須です。
set EXEC_SQL_OPTION CGI; は、ホームページで入力されたデータをシェル変数に登録し、出力モードをHTMLにします。
HTMLのFORM文では、GET/POSTメソッドを使用できます。
また、クッキーがセットされている場合、クッキーの値は、次のシェル変数に登録されます。
- ${HTTP_COOKIEKEY[i]}:
- クッキーのキー名
- ${HTTP_COOKIEVAL[i]}:
- クッキーの値 (但し、i は 0 から HTTP_NCOOKIE-1 までです。)
Webサーバ上に、例えば次のようなHTMLファイル(ホームページ)があるものとします。ここでは、passwd, MYNAME, ADDRESS の3つのデータを入力するものとします。
<HTML>
<FORM METHOD=POST ACTION="test.sh">
<INPUT TYPE=password NAME=**passwd** >
<INPUT TYPE=text NAME="**MYNAME**" VALUE="sakaida">
<INPUT TYPE=text NAME="**ADDRESS**" VALUE="Osaka">
<INPUT TYPE=submit VALUE=submit>
</HTML>
この場合、ホームページから入力された3つのデータは、CGIシェルスクリプトの set EXEC_SQL_OPTION CGI; によって、それぞれ $passwd, $MYNAME, $ADDRESS シェル変数に格納されます。そのシェル変数を利用したCGIスクリプトの例は次のようになります。
#!/usr/local/bin/pgbash
exec 2>&1
echo "Content-type: text/html"
echo ""
set EXEC_SQL_OPTION CGI;
#
connect to dbname as db1 user nopbody $passwd;
insert into test values( '$MYNAME','$ADDRESS');
select * from test order by uname limit 100;
PgBashは、マルチバイト文字のシェル変数名(例えば、$氏名)を使用することはできません。
従いまして、HTMLのINPUTタグのNAMEにおいて、全角文字を指定することはできないことになります。