PostgreSQL 関数
PostgreSQL
&reftitle.intro;
PostgreSQL データベースはオープンソースのプロダクツであり、無料で
使用可能です。Postgres は元々 UCB(カリフォルニア大学バークレイ校)
コンピュータ・サイエンス学部で開発されたものです。この Postgres は、
現在いくつかの商用データベースにおいてサポートされつつある
オブジェクトリレーショナルデータベース的概念の多くの先駆けでした。
Postgres は、SQL92/SQL99 言語サポート・トランザクション・参照整合性・
ストアドプロシージャ・拡張可能な型を提供しています。PostgreSQLは、
バークレイ校での Postgres のオリジナルコードの、オープンソースの
子孫にあたります。
&reftitle.required;
PostgreSQL サポートを使用するには、PostgreSQL 6.5 以降が必要です。
PostgreSQL 8.0 以降では PostgreSQL モジュールの全ての機能を使用可能
です。PostgreSQL は、マルチバイト文字エンコーディングを含む多くの
文字エンコーディングをサポートしています。現在のバージョン及び
PostgreSQLに関するより詳細な情報は、
&url.pgsql; と
PostgreSQL Documentation
で入手可能です。
&reference.pgsql.configure;
&reference.pgsql.ini;
使用法およびヒント
通知メッセージを処理するコードにバグがあるため、PHP 4.0.6 で
PostgreSQL モジュールを使用することは推奨されません。
4.1.0 以降を使用してください。
PostgreSQL モジュールの関数名は、現在のコーディング標準に準拠する
ために 4.2.0 以降で変更されました。新しい関数名のほとんどには、
pg_lo_open() のようにアンダースコアが付きます。
いくつかの関数は、pg_exec() から pg_query() というように、統一を
とるために関数名が変更されます。
古い名前も 4.2.0 とそれに続くいくつかのバージョンで使用可能ですが、
将来的には削除される可能性があります。
変更された関数名
古い関数名
新しい関数名
pg_cmdtuples
pg_affected_rows
pg_errormessage
pg_last_error
pg_exec
pg_query
pg_fieldname
pg_field_name
pg_fieldsize
pg_field_size
pg_fieldnum
pg_field_num
pg_fieldprtlen
pg_field_prtlen
pg_fieldisnull
pg_field_is_null
pg_freeresult
pg_free_result
pg_getlastoid
pg_last_oid
pg_loreadall
pg_lo_read_all
pg_locreate
pg_lo_create
pg_lounlink
pg_lo_unlink
pg_loopen
pg_lo_open
pg_loclose
pg_lo_close
pg_loread
pg_lo_read
pg_lowrite
pg_lo_write
pg_loimport
pg_lo_import
pg_loexport
pg_lo_export
pg_numrows
pg_num_rows
pg_numfields
pg_num_fields
pg_result
pg_fetch_result
従来の pg_connect/pg_pconnect
構文は、将来的に非同期接続
機能をサポートするために過去のものとなる可能性があります。
pg_connect、pg_pconnect
では、接続文字列を使用してください。
全ての関数が全ての構築環境でサポートされるわけではありません。
サポートされる関数は、使用する libpq(PostgreSQL の C クライアント
インターフェイス) のバージョンと libpq のコンパイル方法に依存します。
足りない関数がある場合、libpq はその関数を必要とする機能を
サポートしません。
接続する PostgreSQL サーバよりも新しい libpq を使用することも
重要です。使用する libpq のバージョンが PostgreSQL サーバが期待するよりも
古い場合、問題を生じる可能性があります。
バージョン 6.3(1998/3/2) 以降、PostgreSQL は UNIX ドメインソケットを
使用しています。TCP ポートをオープンしておく必要はありません。
これらの新しいコネクションの使用例を以下に示す表に
示します。このソケットは /tmp/.s.PGSQL.5432 に
あります。このオプションは postmaster に対して'-
i' フラグを指定することで有効となります。これは "Unix ドメイン
のほかにソケット以外の TCP/IP ソケットもlisten する"という意味です。
Postmaster と PHP
Postmaster
PHP
ステータス
postmaster &
pg_connect("dbname=MyDbName");
OK
postmaster -i &
pg_connect("dbname=MyDbName");
OK
postmaster &
pg_connect("host=localhost dbname=MyDbName");
Unable to connect to PostgreSQL server: connectDB() failed:
Is the postmaster running and accepting TCP/IP (with -i)
connection at 'localhost' on port '5432'? in
/path/to/file.php on line 20.
postmaster -i &
pg_connect("host=localhost dbname=MyDbName");
OK
PostgreSQL サーバへの接続は、以下のようにコマンド文字列の中に
値の組を羅列することにより、確立することができます。
$conn = pg_connect("host=myHost port=myPort tty=myTTY
options=myOptions dbname=myDB user=myUser password=myPassword");
以前の構文:
$conn = pg_connect ("host", "port", "options", "tty", "dbname")
は古い構文であり、推奨されません。
環境変数は、PostgreSQL サーバ/クライアントの動作に影響を与えます。
例えば、PostgreSQL モジュールは、ホスト名が接続文字列で省略された
場合、環境変数 PGHOST を探します。サポートされる環境変数は、バージョン
毎に異なります。詳細は、PostgreSQL プログラマ用マニュアル(libpq -
環境変数)を参照ください。
適切なユーザ用に環境変数が設定されていることを確認してください。
カレントのプロセスで利用可能な環境変数を確認するには、
$_ENV または getenv
を使用してください。
デフォルトのパラメータを設定する
PostgreSQL は、識別子(例: テーブル名・カラム名)を自動的に小文字に
変換します。大文字として認識させるには、識別子を常にクォートする
必要があります。
&reference.pgsql.constants;
&reftitle.examples;
PostgreSQL 7.1.0 から、text データ型の最大サイズは 1GB となっています。
古い PostgreSQL の text データ型はブロックサイズ(デフォルトは 8KB、最大
32KB をコンパイル時に定義可能)の制限を受けていました。
ラージオブジェクト(lo)インターフェースを使用するには、そのクエリーを
トランザクション・ブロックの中に入れてやる必要があります。
トランザクション・ブロックは BEGIN で始まり、
そのトランザクションが有効な場合は COMMIT または
END で終わります。トランザクションが失敗した場合、
そのトランザクションは ROLLBACK または
ABORT により閉じる必要があります。
ラージオブジェクトの使用例
]]>
ラージオブジェクトリソースを閉じる前に PostgreSQL サーバへの接続を
閉じないようにしてください。
&reference.pgsql.functions;