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