DECLARE cursor [ BINARY ] [ INSENSITIVE ] [ SCROLL ] CURSOR FOR query [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
この後に FETCH 操作などで使われる、カーソルの名前。
カーソルがテキスト形式ではなくバイナリ形式でデータを取り出す。
カーソルから取り出されたデータが他のプロセスやカーソルによる 更新の影響を受けないことを示す、SQL92 の キーワード。Postgres でのカーソル 操作はトランザクションの内側で行なわれますので、常にこの状態 になっています。このキーワードは効果がありません。
1 つの FETCH 操作によって複数の行のデータを取り出すことがで きることを示す、SQL92 のキーワード。 Postgres では、常にこれは可能です ので、このキーワードは効果がありません。
カーソルによって管理される行を提供する、1 つの SQL 問い合わ せ。有効な引数に関するより詳細については SELECT 文を参照し て下さい。
読み取り専用モードでカーソルが使用されることを示す、 SQL92 のキーワード。これは Postgres における唯一のカーソルの アクセスモードですので、このキーワードは効果がありません。
カーソルがテーブルの更新に使用されることを示す、 SQL92 のキーワード。カーソルによる更新は今 のところ Postgres でサポートされて いませんので、このキーワードはこのことを伝えるエラーメッセー ジを表示します。
更新されるカラム(複数可)。カーソルによる更新は今のところ Postgres でサポートされていませ んので、UPDATE 句はこのことを伝えるエラーメッセージを表示 します。
DECLARE によってユーザは、巨大な問い合わせの中 から一度に少数の行を取り出すことに使用できるカーソルを作成すること ができます。カーソルはテキストもしくはバイナリのどちらかの形式でデ ータを返すことができます。
カーソルは通常、ASCII または Postgres バックエンドがどのように構築されたのかに依存する ASCII 以外のコー ド化方式のどちらかのテキスト形式でデータを返します。データは固有の バイナリ形式で保存されていますので、システムはテキスト形式を生成す るために変換を行なう必要があります。更にテキスト形式の場合、対応す るバイナリ形式よりもそのサイズが大きくなることがよくあります。情報 がテキスト形式で返されると、クライアントアプリケーションはそれを何 とか取り扱うためにそれをバイナリ形式に変換する必要になることがあり ます。
BINARY カーソルはデータをその固有のバイナリ表現で返します。バイナリ 形式のカーソルは変換のオーバヘッド分処理が少なくなりますので、多少 高速になる傾向があります。
例えば、問い合わせが整数カラムから 1 つの値を返す場合、デフォルト のカーソルでは '1' という文字列を入手することになりますが、バイナ リ形式のカーソルの場合は control-A ('^A')と同一の 4 バイトの値 を入手することになります。
Caution |
BINARY カーソルは注意して使わなければなりません。 psql のようなユーザアプリケーションは バイナリ形式のカーソルと気づかずにデータはテキスト形式で返される ものとみなしています。 |
しかし、文字列表現はアーキテクチャに中立ですが、バイナリ表現はマシ ンのアーキテクチャによって異なります。ですので、クライアントマシン とサーバマシンで異なる表現(例えば、"big-endian" 対 "little-endian" )を使用する場合、多分バイナリ形式でデータを戻そう とは考えないでしょう。
Tip: データを ASCII で表示を行なう場合はデータを ASCII 形式で入手す ることでクライアント側での処理をいくつか省くことができます。