DECLARE cursorname [ 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によって、ユーザは巨大な問い合わせの中 から一度に少数の行を取り出すことに使用できるカーソルを作成すること ができます。 FETCHを使用 して、カーソルからテキストもしくはバイナリのどちらかの形式でデ ータを返すことができます。
通常のカーソルは、Postgresのバックエンドが どのように構築されたかによって、ASCIIまたはその他のエンコードスキーマ のテキスト形式でデータを返します。元のデータは固有のバイナリ形式で 保存されていますので、システムはテキスト形式を生成するために変換を 行なう必要があります。また、テキスト形式の場合、対応するバイナリ形式よりも そのサイズが大きくなることがよくあります。 情報がテキスト形式で返されると、クライアントアプリケーションは情報 を処理するためにバイナリ形式に変換する必要になることがあります。 BINARYカーソルによって、固有のバイナリ表現でデータを返すことがで きます。
例えば、問い合わせが整数の列から"1"の値を返す場合、デフォルト のカーソルと一緒に'1'という文字列を入手することになりますが、バイナ リ形式のカーソルの場合はcontrol-A ('^A')と同一の4バイトの値 を入手することになります。
BINARYカーソルは注意して使わなければなりません。 psqlのようなユーザアプリケーションは バイナリ形式のカーソルと認識せず、データはテキスト形式で返される ものとみなしています。
文字列表現はアーキテクチャに依存しませんが、バイナリ表現はマシンの アーキテクチャによって異なります。Postgres は BINARY カーソルに関するバイトオーダとか表現形式の問題などを 解決しません。ですから、クライアントマシンとサーバマシンで 異なる表現 (例えば、"big-endian"対"little-endian")を使用する場合、 バイナリ形式でデータを返さない方が良いでしょう。しかし、バイナリ形式の カーソルには、サーバからクライアントへのデータ転送の際の変換に要する オーバーヘッドが少なくなるという、多少の効果があり得ます。
Tip: ASCII形式でデータを表示する場合は、ASCII形式で結果 を受けとることでクライアント側でのいくつかの処理を省くこ とができます。