本節では、既存のクライアントライブラリをプロトコル3.0に更新しようとする開発者向けに、変更点の簡易チェックリストを示します。
最初の開始パケットは、固定書式ではなく、柔軟な文字列のリスト書式を使用します。
実行時パラメータのセッションのデフォルト値が直接開始パケット内に指定できるようになった点に注意してください。
(実際、以前でもoptions
フィールドを使用してこれを行うことができましたが、options
には長さに制限があること、および値内の空白文字を引用符でくくる方法がないことから、あまり安全な技法ではありませんでした。)
すべてのメッセージが、メッセージ種類バイトの直後にバイト数を持つようになりました (種類バイトがない開始パケットは例外です)。 また、PasswordMessageが種類バイトを持つようになったことにも注意してください。
ErrorResponseおよびNoticeResponse('E
'および'N
')メッセージが複数のフィールドを持つようになりました。
これを使用して、クライアントコードは、必要な冗長度に合わせて、エラーメッセージを組み立てることができます。
個々のフィールドが通常改行で終わらないことに注意してください。
単一の文字列を送信する古いプロトコルでは、常に改行で終わっていました。
ReadyForQuery('Z
')メッセージに、トランザクション状態指示子が含まれます。
BinaryRowとDataRowメッセージ種類間の区別がなくなりました。 1つのDataRowメッセージ種類で、すべての書式で記述されたデータを返すことができます。 DataRowのレイアウトが解析しやすいように変更されたことに注意してください。 またバイナリ値の表現も変更されました。 もはやサーバの内部表現に直接束縛されません。
新しい「拡張問い合わせ」サブプロトコルがあります。 これにより、フロントエンドメッセージ種類にParse、Execute、Describe、Close、Flush、およびSyncが、バックエンドメッセージ種類にParseComplete、BindComplete、PortalSuspended、ParameterDescription、NoData、およびCloseCompleteが追加されました。 既存のクライアントは、このサブプロトコルを意識する必要はありませんが、これを使用することで、性能や機能を向上させることができます。
COPY
データがCopyDataとCopyDoneメッセージにカプセル化されるようになりました。
COPY
中のエラーから復旧するための十分に定義された方法があります。
特別な「\.
」という最後の行はもはや不要で、COPY OUT
で送信されません。
(COPY IN
ではまだ終端として認識されます。しかし、この使用は廃止予定で、最終的には削除されます。)
バイナリCOPY
がサポートされます。
CopyInResponseとCopyOutResponseメッセージは、列数と各列の書式を示すフィールドが含まれます。
FunctionCallとFunctionCallResponseメッセージのレイアウトが変更されました。 FunctionCallは関数へのNULL引数を渡すことができるようになりました。 また、テキストとバイナリ書式のどちらでもパラメータの引き渡しと結果の取り出しを扱うことができます。 サーバの内部データ表現への直接アクセスを提供しなくなりましたので、FunctionCallを潜在的なセキュリティホールとみなす理由はもはやありません。
バックエンドは、接続開始時にクライアントライブラリが興味を持つとみなされるすべてのパラメータのためにParameterStatus('S
')メッセージを送信します。
その後、これらのパラメータのいずれかの実際の値が変更された時は常に、ParameterStatusメッセージが送信されます。
RowDescription('T
')メッセージは、新規に、記述する各列に対してテーブルのOIDと列番号フィールドを伝えます。
また各列の書式コードも示します。
CursorResponse('P
')メッセージはもはやバックエンドで生成されません。
NotificationResponse('A
')メッセージは、NOTIFY
イベントの送信者から渡される「ペイロード」文字列を伝えることができる追加文字列フィールドを持ちます。
EmptyQueryResponse('I
')メッセージは、空の文字列パラメータを含めるために使用されていました。
これは削除されました。