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形式で結果を受けとることでクライアント側でのいくつかの処理を省くことができます。