This section provides a quick checklist of changes, for the benefit of developers trying to update existing client libraries to protocol 3.0. 本節では、既存のクライアントライブラリをプロトコル3.0に更新しようとする開発者向けに、変更点の簡易チェックリストを示します。
The initial startup packet uses a flexible list-of-strings format
instead of a fixed format. Notice that session default values for run-time
parameters can now be specified directly in the startup packet. (Actually,
you could do that before using the <literal>options</literal> field, but given the
limited width of <literal>options</literal> and the lack of any way to quote
whitespace in the values, it wasn't a very safe technique.)
最初の開始パケットは、固定書式ではなく、柔軟な文字列のリスト書式を使用します。
実行時パラメータのセッションのデフォルト値が直接開始パケット内に指定できるようになった点に注意してください。
(実際、以前でもoptions
フィールドを使用してこれを行うことができましたが、options
には長さに制限があること、および値内の空白文字を引用符でくくる方法がないことから、あまり安全な技法ではありませんでした。)
All messages now have a length count immediately following the message type byte (except for startup packets, which have no type byte). Also note that PasswordMessage now has a type byte. すべてのメッセージが、メッセージ種類バイトの直後にバイト数を持つようになりました (種類バイトがない開始パケットは例外です)。 また、PasswordMessageが種類バイトを持つようになったことにも注意してください。
ErrorResponse and NoticeResponse ('<literal>E</literal>' and '<literal>N</literal>')
messages now contain multiple fields, from which the client code can
assemble an error message of the desired level of verbosity. Note that
individual fields will typically not end with a newline, whereas the single
string sent in the older protocol always did.
ErrorResponseおよびNoticeResponse('E
'および'N
')メッセージが複数のフィールドを持つようになりました。
これを使用して、クライアントコードは、必要な冗長度に合わせて、エラーメッセージを組み立てることができます。
個々のフィールドが通常改行で終わらないことに注意してください。
単一の文字列を送信する古いプロトコルでは、常に改行で終わっていました。
The ReadyForQuery ('<literal>Z</literal>') message includes a transaction status
indicator.
ReadyForQuery('Z
')メッセージに、トランザクション状態指示子が含まれます。
The distinction between BinaryRow and DataRow message types is gone; the single DataRow message type serves for returning data in all formats. Note that the layout of DataRow has changed to make it easier to parse. Also, the representation of binary values has changed: it is no longer directly tied to the server's internal representation. BinaryRowとDataRowメッセージ種類間の区別がなくなりました。 1つのDataRowメッセージ種類で、すべての書式で記述されたデータを返すことができます。 DataRowのレイアウトが解析しやすいように変更されたことに注意してください。 またバイナリ値の表現も変更されました。 もはやサーバの内部表現に直接束縛されません。
There is a new <quote>extended query</quote> sub-protocol, which adds the frontend message types Parse, Bind, Execute, Describe, Close, Flush, and Sync, and the backend message types ParseComplete, BindComplete, PortalSuspended, ParameterDescription, NoData, and CloseComplete. Existing clients do not have to concern themselves with this sub-protocol, but making use of it might allow improvements in performance or functionality. 新しい「拡張問い合わせ」サブプロトコルがあります。 これにより、フロントエンドメッセージ種類にParse、Execute、Describe、Close、Flush、およびSyncが、バックエンドメッセージ種類にParseComplete、BindComplete、PortalSuspended、ParameterDescription、NoData、およびCloseCompleteが追加されました。 既存のクライアントは、このサブプロトコルを意識する必要はありませんが、これを使用することで、性能や機能を向上させることができます。
<command>COPY</command> data is now encapsulated into CopyData and CopyDone messages. There
is a well-defined way to recover from errors during <command>COPY</command>. The special
<quote><literal>\.</literal></quote> last line is not needed anymore, and is not sent
during <command>COPY OUT</command>.
(It is still recognized as a terminator during <command>COPY IN</command>, but its use is
deprecated and will eventually be removed.) Binary <command>COPY</command> is supported.
The CopyInResponse and CopyOutResponse messages include fields indicating
the number of columns and the format of each column.
COPY
データがCopyDataとCopyDoneメッセージにカプセル化されるようになりました。
COPY
中のエラーから復旧するための十分に定義された方法があります。
特別な「\.
」という最後の行はもはや不要で、COPY OUT
で送信されません。
(COPY IN
ではまだ終端として認識されます。しかし、この使用は廃止予定で、最終的には削除されます。)
バイナリCOPY
がサポートされます。
CopyInResponseとCopyOutResponseメッセージは、列数と各列の書式を示すフィールドが含まれます。
The layout of FunctionCall and FunctionCallResponse messages has changed. FunctionCall can now support passing NULL arguments to functions. It also can handle passing parameters and retrieving results in either text or binary format. There is no longer any reason to consider FunctionCall a potential security hole, since it does not offer direct access to internal server data representations. FunctionCallとFunctionCallResponseメッセージのレイアウトが変更されました。 FunctionCallは関数へのNULL引数を渡すことができるようになりました。 また、テキストとバイナリ書式のどちらでもパラメータの引き渡しと結果の取り出しを扱うことができます。 サーバの内部データ表現への直接アクセスを提供しなくなりましたので、FunctionCallを潜在的なセキュリティホールとみなす理由はもはやありません。
The backend sends ParameterStatus ('<literal>S</literal>') messages during connection
startup for all parameters it considers interesting to the client library.
Subsequently, a ParameterStatus message is sent whenever the active value
changes for any of these parameters.
バックエンドは、接続開始時にクライアントライブラリが興味を持つとみなされるすべてのパラメータのためにParameterStatus('S
')メッセージを送信します。
その後、これらのパラメータのいずれかの実際の値が変更された時は常に、ParameterStatusメッセージが送信されます。
The RowDescription ('<literal>T</literal>') message carries new table OID and column
number fields for each column of the described row. It also shows the format
code for each column.
RowDescription('T
')メッセージは、新規に、記述する各列に対してテーブルのOIDと列番号フィールドを伝えます。
また各列の書式コードも示します。
The CursorResponse ('<literal>P</literal>') message is no longer generated by
the backend.
CursorResponse('P
')メッセージはもはやバックエンドで生成されません。
The NotificationResponse ('<literal>A</literal>') message has an additional string
field, which can carry a <quote>payload</quote> string passed
from the <command>NOTIFY</command> event sender.
NotificationResponse('A
')メッセージは、NOTIFY
イベントの送信者から渡される「ペイロード」文字列を伝えることができる追加文字列フィールドを持ちます。
The EmptyQueryResponse ('<literal>I</literal>') message used to include an empty
string parameter; this has been removed.
EmptyQueryResponse('I
')メッセージは、空の文字列パラメータを含めるために使用されていました。
これは削除されました。