<Chapter Id="protocol">
<DocInfo>
<Author>
<FirstName>Phil</FirstName>
<Surname>Thompson</Surname>
</Author>
<Date>1998-08-08</Date>
</DocInfo>
<!-- <Title>Frontend/Backend Protocol</Title> -->
<Title>フロントエンド/バックエンドプロトコル</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary sortas="ぷろとこる">プロトコル</secondary></indexterm>
<Note>
<para>
<!-- 
Written by Phil Thompson (<email>phil@river-bank.demon.co.uk</email>).
Updates for protocol 2.0 by Tom Lane (<email>tgl@sss.pgh.pa.us</email>).
-->

Phil Thompson（<email>phil@river-bank.demon.co.uk</email>）によって作成されました。Tom Lane（<email>tgl@sss.pgh.pa.us</email>）によりプロトコルバージョン2.0用に更新されました。

</para>
</Note>

<para>
<!-- 
<ProductName>Postgres</ProductName> uses a message-based protocol 
for communication between frontends and backends.  
The protocol is implemented over <Acronym>TCP/IP</Acronym> and also on 
Unix sockets.
<ProductName>Postgres</ProductName> 6.3 introduced version numbers into 
the protocol.  This was done in such
a way as to still allow connections from earlier versions of frontends, but
this document does not cover the protocol used by those earlier versions.
-->

<ProductName>Postgres</ProductName>はフロントエンドとバックエンドの通信にメッセージベースのプロトコルを使用します。このプロトコルは<Acronym>TCP/IP</Acronym>やUnixソケットを介して実装されます。<ProductName>Postgres</ProductName> 6.3はこのプロトコルに対しバージョン番号を導入しました。これは旧バージョンのフロントエンドに対しても接続を可能にするためですが、このドキュメントでは以前のバージョンで使用されたプロトコルについては解説しません。

</para>

<para>
<!-- This document describes version 2.0 of the protocol, implemented in
<ProductName>Postgres</ProductName> 6.4 and later. -->

このドキュメントは<ProductName>Postgres</ProductName> 6.4以降に実装されたプロトコル2.0バージョンについて記載します。


</para>

<para>
<!--
Higher level features built on this protocol (for example, how 
<FileName>libpq</FileName> passes
certain environment variables after the connection is established)
are covered elsewhere. -->

本プロトコル上に構築されたより高度の機能（たとえば、接続開始後どのように<FileName>libpq</FileName>がある特定の環境変数を渡すか）についても記載します。

</para>

<Sect1 id="protocol-overview">
<!-- <Title>Overview</Title>-->
<Title>概要</Title>

<para>
<!-- 
The three major components are the frontend (running on the client) and the
postmaster and backend (running on the server).  The postmaster and backend
have different roles but may be implemented by the same executable.
-->

主だった3つのコンポーネントとして、フロントエンド（クライアント側で動くもの）、postmasterまたはバックエンド（サーバー上で動くもの）があります。postmasterとバックエンドは異なった役割を持っていますが、同一のバイナリで実装されています。


</para>

<para>
<!-- 
A frontend sends a start-up packet to the postmaster.  This includes the names
of the user and the database the user wants to connect to.  The postmaster then
uses this, and the information in the <filename>pg_hba.conf</filename>
file
to determine what
further authentication information it requires the frontend to send (if any)
and responds to the frontend accordingly. -->

フロントエンドは開始パケットをpostmasterに送ります。開始パケットにはユーザーの名前とユーザーが接続しようとしているデータベースの名称が含まれています。postmasterはこのパケットの情報と<filename>pg_hba.conf</filename>ファイルの内容から、ここでフロントエンドが更に加えて送さなければいけない認証のための情報（もしあれば）を決定してフロントエンドに要求します。<indexterm><primary>pg_hba.conf</primary></indexterm>

</para>

<para>
<!--  
The frontend then sends any required authentication information.  Once the
postmaster validates this it responds to the frontend that it is authenticated
and hands over the connection to a backend.  The backend then sends a message
indicating successful start-up (normal case) or failure (for example, an
invalid database name). -->

フロントエンドは要求された認証情報を送り返します。postmasterが承認した 場合postmasterは認証完了のサインをフロントエンドに返し、接続をバックエンドに引き渡します。そこでバックエンドは（通常の場合）起動成功あるいは失敗（たとえば無効なデータベース名）のメッセージを返します。

</para>

<para>
<!--
Subsequent communications are query and result packets exchanged between the
frontend and the backend.  The postmaster takes no further part in ordinary
query/result communication.  (However, the postmaster is involved when the
frontend wishes to cancel a query currently being executed by its backend.
Further details about that appear below.) -->

次に引き続く通信は、フロントエンドとバックエンド間で交換される問い合わせとその結果のパケットです。postmasterは通常の問い合わせと回答の通信には関与しません（ただし、現在バックエンドで処理中の問い合わせをフロントエンドが取り消けそうとするときpostmasterは関与します。詳細については後述します）。

</para>

<para>
<!--
When the frontend wishes to disconnect it sends an appropriate packet and
closes the connection without waiting for a response for the backend.
-->

フロントエンドが接続を解除するとき、特定のパケットを送出し、バックエンドの応答を待つことなく接続を解除します。

</para>

<para>
<!-- 
Packets are sent as a data stream.  The first byte determines what should be
expected in the rest of the packet.  The exception is packets sent from a
frontend to the postmaster, which comprise a packet length then the packet
itself.  The difference is historical. -->

パケットは一連のデータの流れとして送出されます。第1バイトは、それ以降パケットが何を要求しているかを規定します。例外はフロントエンドからpostmasterに送られるパケットで、パケット長と、パケットのデータそのものから成ります。この違いは歴史的な事情によるものです。


</para>
</sect1>

<Sect1 id="protocol-protocol">
<!-- <Title>Protocol</Title> -->
<Title>メッセージの流れ</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのながれ">メッセージの流れ</secondary></indexterm>
<para>
<!-- 
This section describes the message flow.  There are four different types of
flows depending on the state of the connection:
start-up, query, function call, and termination.
There are also special provisions for notification responses and command
cancellation, which can occur at any time after the start-up phase.
-->

ここではメッセージの流れに付いて記載します。接続の状況、つまり、開始、問い合わせ、関数呼び出し、終了フェーズによって4つの異なった流れがあります。開始フェーズ以降の任意の時点で発生し得る通知回答と命令取り消しには、特別な規定が存在します。


</para>


<Sect2>
<!-- <Title>Start-up</Title> -->
<Title>開始</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="かいし">開始</secondary></indexterm>
<para>
<!-- 
Start-up is divided into an authentication phase and a backend start-up phase.
-->

開始フェーズは、認証フェーズとバックエンド開始フェーズに分割されます。
</para>

<para>
<!-- 
Initially, the frontend sends a StartupPacket.  The postmaster uses this info
and the contents of the pg_hba.conf file to determine what authentication
method the frontend must use.  The postmaster then responds with one of the
following messages: -->

始めにフロントエンドはStartupPacketを送ります。postmasterはこのパケットの情報とpg_hba.confファイルの内容から、フロントエンドが使用すべき認証方法を決定し、続いて以下のメッセージのどれか1つを返します。


</para>

<VariableList>
<VarListEntry>
<Term>
	ErrorResponse
</Term>
<ListItem>
<para>
<!-- 		The postmaster then immediately closes the connection.-->
                この後すぐpostmasterは接続を解除します。


</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	AuthenticationOk
</Term>
<ListItem>
<para>
<!--
		The postmaster then hands over to the backend.  The postmaster
		takes no further part in the communication. -->

                この後postmasterはバックエンドに引き継ぎます。postmasterはこれ以降は通信に関与しません。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	AuthenticationKerberosV4
</Term>
<ListItem>
<para>
                <!-- 
		The frontend must then take part in a Kerberos V4
		authentication dialog (not described here) with the postmaster.
		If this is successful, the postmaster responds with an
		AuthenticationOk, otherwise it responds with an ErrorResponse.
                -->

               この後フロントエンドはpostmasterとKerberos V4の認証手続き（ここでは説明しません）を開始しなければいけません。成功すると、postmasterはAuthenticationOkを返します。失敗した場合はErrorResponseを返します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	AuthenticationKerberosV5
</Term>
<ListItem>
<para>
                <!--  
		The frontend must then take part in a Kerberos V5
		authentication dialog (not described here) with the postmaster.
		If this is successful, the postmaster responds with an
		AuthenticationOk, otherwise it responds with an ErrorResponse.
                -->
                この後フロントエンドはpostmasterとKerberos V5の認証手続き（ここでは説明しません）を開始しなければいけません。成功すると、postmasterはAuthenticationOkを返します。失敗した場合はErrorResponseを返します。
 
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	AuthenticationUnencryptedPassword
</Term>
<ListItem>
<para>
                <!-- 
		The frontend must then send an UnencryptedPasswordPacket.
		If this is the correct password, the postmaster responds with
		an AuthenticationOk, otherwise it responds with an
		ErrorResponse. -->

                この後フロントエンドはUnencryptedPasswordPacketを送出しなければいけません。もしこのパスワードが正しければ、postmasterはAuthenticationOkを返します。失敗した場合はErrorResponseを返します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	AuthenticationEncryptedPassword
</Term>
<ListItem>
<para>
                <!--  
		The frontend must then send an EncryptedPasswordPacket.
		If this is the correct password, the postmaster responds with
		an AuthenticationOk, otherwise it responds with an
		ErrorResponse. -->

                この後フロントエンドはEncryptedPasswordPacketを送出しなければいけません。もしこのパスワードが正しければ、postmasterはAuthenticationOkを返します。失敗した場合はErrorResponseを返します。

</para>
</ListItem>
</VarListEntry>
</VariableList>

<para>
<!-- 
If the frontend does not support the authentication method requested by the
postmaster, then it should immediately close the connection. -->

postmasterが要求する認証方式をフロントエンドがサポートしない場合、接続を即座に解除しなければいけません。


</para>

<para>
<!-- 
After sending AuthenticationOk, the postmaster attempts to launch a backend
process.  Since this might fail, or the backend might encounter a failure
during start-up, the frontend must wait for the backend to acknowledge
successful start-up.  The frontend should send no messages at this point.
The possible messages from the backend during this phase are: -->

AuthenticationOkを送出後、postmasterはバックエンドプロセスの起動にかかります。これに失敗するかまたはバックエンドに起動段階で問題があった場合、フロントエンドはバックエンドが正常に起動するのを待たなければいけません。この時点ではフロントエンドは何のメッセージも送りません。この段階でバックエンドから送られるメッセージとしては以下のものがあります。
</para>

<VariableList>
<VarListEntry>
<Term>
	BackendKeyData
</Term>
<ListItem>
<para>
                <!-- 
		This message is issued after successful backend start-up.
		It provides secret-key data that the frontend must save
		if it wants to be able to issue cancel requests later.
		The frontend should not respond to this message, but should
		continue listening for a ReadyForQuery message. -->

               このメッセージはバックエンドが起動に成功した場合に送出されます。これは、後にフロントエンドが取り消しリクエストを出す事ができるようにするために、保存しておくべき秘密鍵データを提供します。フロントエンドはこのメッセージに応答してはいけませんが、ReadyForQueryメッセージを受信し続ける必要があります。


</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	ReadyForQuery
</Term>
<ListItem>
<para>          <!-- 
		Backend start-up is successful.  The frontend may now issue
		query or function call messages. -->
                
                バックエンドの開始が成功しました。フロントエンドは問い合わせまたは関数呼び出しメッセージを送ることができます。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	ErrorResponse
</Term>
<ListItem>
<para>          <!-- 
		Backend start-up failed.  The connection is closed after
		sending this message. -->

                バックエンドの起動に失敗しました。このメッセージ送出後、接続は解除されます。


</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	NoticeResponse
</Term>
<ListItem>
<para>          <!-- 
		A warning message has been issued.  The frontend should
		display the message but continue listening for ReadyForQuery
		or ErrorResponse. -->

                警告メッセージが出されました。フロントエンドはこのメッセージを表示しなくてはいけませんが、引続きReadyForQueryまたはErrorResponseを受信し続けます。


</para>
</ListItem>
</VarListEntry>
</VariableList>

<para>
<!-- 
The ReadyForQuery message is the same one that the backend will issue after
each query cycle.  Depending on the coding needs of the frontend, it is
reasonable to consider ReadyForQuery as starting a query cycle (and then
BackendKeyData indicates successful conclusion of the start-up phase),
or to consider ReadyForQuery as ending the start-up phase and each subsequent
query cycle. -->

ReadyForQueryメッセージは各問い合わせサイクルの後にバックエンドが出すものと同じものです。フロントエンドのコーディングにおいて必要であれば、ReadyForQueryを問い合わせサイクルの開始とみなしてもかまいません（そしてBackendKeyDataにより開始フェーズの正常終了が通知されます）し、開始フェーズとそれに続く各問い合わせサイクルの終了とみなしてもよいでしょう。


</para>
</sect2>

<Sect2>
<!-- <Title>Query</Title> -->
<Title>問い合わせ</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="といあわせ">問い合わせ</secondary></indexterm><indexterm><primary sortas="といあわせ">問い合わせ</primary><secondary sortas="ぷろとこる">プロトコル</secondary></indexterm>
<para>
<!-- 
A Query cycle is initiated by the frontend sending a Query message to the
backend.  The backend then sends one or more response messages depending
on the contents of the query command string, and finally a ReadyForQuery
response message.  ReadyForQuery informs the frontend that it may safely
send a new query or function call. -->


1つの問い合わせサイクルはフロントエンドがバックエンドに問い合わせメッセージを送ることで起動されます。そこでバックエンドは問い合わせ命令の文字列の内容に基づいて1つまたは複数の回答メッセージを送り、最終的にReadyForQuery回答メッセージを送出します。ReadyForQueryはフロントエンドに確実に新規の問い合わせまたは関数呼び出しを行ってもよいことを伝えます。

</para>

<para>
<!-- The possible response messages from the backend are: -->
バックエンドから送られるメッセージとしては以下のものがあります。
</para>


<VariableList>
<VarListEntry>
<Term>
	CompletedResponse
</Term>
<ListItem>
<para>
		<!-- An SQL command completed normally. -->
                SQLコマンドが正常に終了しました。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	CopyInResponse
</Term>
<ListItem>
<para>          <!-- 
		The backend is ready to copy data from the frontend to a
		relation.  The frontend should then send a CopyDataRows
		message.  The backend will then respond with a
		CompletedResponse message with a tag of "COPY". -->

                バックエンドがフロントエンドからのデータをリレーションにコピーする準備ができました。フロントエンドはここでCopyDataRowsメッセージを送出しなければいけません。そこで、バックエンドは「COPY」という文字列のタグを付けたCompletedResponseメッセージを返します。 

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	CopyOutResponse
</Term>
<ListItem>
<para>          <!-- 
		The backend is ready to copy data from a relation to the
		frontend.  It then sends a CopyDataRows message, and then a
		CompletedResponse message with a tag of "COPY". -->

                バックエンドがデータをリレーションからフロントエンドにコピーする準備ができました。バックエンドはここでCopyDataRowsメッセージに引き続き、「COPY」という文字列のタグを付けたCompletedResponseメッセージを返します。 

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	CursorResponse
</Term>
<ListItem>
<para>          <!--  
		The query was either an insert(l), delete(l), update(l),
		fetch(l) or a select(l) command.
                If the transaction has been
                aborted then the backend sends a CompletedResponse message with
                a tag of "*ABORT STATE*".  Otherwise the following responses
                are sent. -->

                問い合わせはinsert(l)、delete(l)、update(1)、fetch(l)、select(l)命令のいずれかです。トランザクションが中断された場合、バックエンドは「*ABORT STATE*」という文字列のタグを付けたCompletedResponseメッセージを送ります。それ以外では、以下の応答があります。


</para>
<para>          <!-- 
		For an insert(l) command, the backend then sends a
		CompletedResponse message with a tag of "INSERT <Replaceable>oid</Replaceable> <Replaceable>rows</Replaceable>"
		where <Replaceable>rows</Replaceable> is the number of rows inserted, and <Replaceable>oid</Replaceable> is the
		object ID of the inserted row if <Replaceable>rows</Replaceable> is 1, otherwise <Replaceable>oid</Replaceable>
		is 0. -->

               insert(l)命令に対し、バックエンドは「INSERT <Replaceable>oid</Replaceable> <Replaceable>rows</Replaceable>」という文字列のタグを付けたCompleteResponseメッセージを送出します。ここで、<Replaceable>rows</Replaceable>は挿入された行の数で、<Replaceable>rows</Replaceable>が1の場合<Replaceable>oid</Replaceable>は挿入された行のオブジェクト識別子で、それ以外の場合は<Replaceable>oid</Replaceable>は0です。 

</para>
<para>          <!--  
		For a delete(l) command, the backend then sends a
		CompletedResponse message with a tag of "DELETE <Replaceable>rows</Replaceable>" where
		<Replaceable>rows</Replaceable> is the number of rows deleted.
                -->

                delete(l)命令に対し、バックエンドは「DELETE <Replaceable>rows</Replaceable>」という文字列のタグを付けたCompletedResponseメッセージを返します。ここで、<Replaceable>rows</Replaceable>は削除された行数です。

</para>
<para>          <!-- 
		For an update(l) command, the backend then sends a
		CompletedResponse message with a tag of "UPDATE <Replaceable>rows</Replaceable>" where
		<Replaceable>rows</Replaceable> is the number of rows deleted.
                -->

                update(l)命令に対し、バックエンドは「UPDATE <Replaceable>rows</Replaceable>」という文字列のタグを付けたCompletedResponseメッセージを返します。ここで、<Replaceable>rows</Replaceable>は削除された行数です。


</para>
<para>          <!--  
		For a fetch(l) or select(l) command, the backend sends a
		RowDescription message.  This is then followed by an AsciiRow
		or BinaryRow message (depending on whether a binary cursor was
		specified) for each row being returned to the frontend.
		Finally, the backend sends a CompletedResponse message with a
		tag of "SELECT". -->

                fetch(l) またはselect(l) コマンドに対し、バックエンドはRowDescriptionメッセージを返します。この後続いて（バイナリカーソルが指定されているかどうかにより）フロントエンドに返されるそれぞれの行に対してAsciiRowまたはBinaryRowメッセージが続きます。最後にバックエンドは「SELECT」という文字列のタグを付けたCompletedResponseメッセージを送出します。 

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	EmptyQueryResponse
</Term>
<ListItem>
<para>          <!-- 
		An empty query string was recognized.  (The need to specially
		distinguish this case is historical.) -->

                空の問い合わせ文字列が検出されました（特別にこのケースを識別する必要性は現在ありません）。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	ErrorResponse
</Term>
<ListItem>
<para>
		<!-- An error has occurred. -->
                エラーが起こりました。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	ReadyForQuery
</Term>
<ListItem>
<para>          <!-- 
		Processing of the query string is complete.  A separate
		message is sent to indicate this because the query string
		may contain multiple SQL commands.  (CompletedResponse marks
		the end of processing one SQL command, not the whole string.)
		ReadyForQuery will always be sent, whether processing
		terminates successfully or with an error. -->

               問い合わせ文字列の処理が完了しました。問い合わせ文字列は複数のSQL命令を含む場合もあるため、別個のメッセージがこの結果を示すために送出されます（CompletedResponseはすべての文字列ではなく、1つのSQL命令の処理の終了の印しです）。ReadyForQueryは処理が正常に終わったかエラーとなったかにかかわらず、常に送られます。 
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	NoticeResponse
</Term>
<ListItem>
<para>          <!--
		A warning message has been issued in relation to the query.
		Notices are in addition to other responses, i.e., the backend
		will continue processing the command. -->

                警告メッセージは特定の問い合わせに関連して出されます。
                警告はバックエンドが命令の処理を引続き行うという、
                他の応答に対する追加のメッセージです。


</para>
</ListItem>
</VarListEntry>
</VariableList>

<para>
<!-- 
A frontend must be prepared to accept ErrorResponse and NoticeResponse
messages whenever it is expecting any other type of message. -->

フロントエンドは他の種類のメッセージを待っているかどうかにかかわらず、 
ErrorResponseとNoticeResponseメッセージを受け取れる状態
になっていなければいけません。

</para>

<para>
<!-- 
Actually, it is possible for NoticeResponse to arrive even when the frontend
is not expecting any kind of message, that is, the backend is nominally idle.
(In particular, the backend can be commanded to terminate by its postmaster.
In that case it will send a NoticeResponse before closing the connection.)
It is recommended that the frontend check for such asynchronous notices just
before issuing any new command. -->

実際には、フロントエンドがメッセージの到着をまったく予期していないような状態でも、 
NoticeResponseが送られて来ることがあります。
これはバックエンドのアイドル状態が、文字どおりの「待機状態」であるとは
限らない、ということです。（特に、バックエンドは自身が対応するpostmaster 
によって終了させられることがあり、この場合、バックエンドは接続を解除する前に 
NoticeResponseを送ります。）フロントエンドには新しい命令を出す直前に、
このような非同期の通知の検証をすることを推奨します。

</para>

<para>
<!-- 
Also, if the frontend issues any listen(l) commands then it must be prepared
to accept NotificationResponse messages at any time; see below. -->

時に、フロントエンドがlisten(l)命令を出した場合、いつでも 
NotificationResponseメッセージを受け取る準備ができていることが必要で
す。以下を参照
</para>
</sect2>

<Sect2>
<!-- <Title>Function Call</Title> -->
<Title>関数の呼び出し</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="かんすうのよびだし">関数の呼び出し</secondary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary sortas="ぷろとこる">プロトコル</secondary></indexterm>
<para>
<!-- 
A Function Call cycle is initiated by the frontend sending a FunctionCall
message to the backend.  The backend then sends one or more response messages
depending on the results of the function call, and finally a ReadyForQuery
response message.  ReadyForQuery informs the frontend that it may safely send
a new query or function call. -->

関数呼び出しサイクルはフロントエンドがFunctionCallメッセージをバックエンド
に送ることで起動されます。バックエンドは1つ又はそれ以上の応答メッセージ
を関数呼び出しの結果に基づいて送り、最終的にReadyForQueryメッセージを
送出します。ReadyForQueryはフロントエンドに対し新規の問い合わせ又は
関数呼び出しを行っても安全確実であることを通知します。 

</para>

<para>
<!-- The possible response messages from the backend are: -->
バックエンドからの応答メッセージとして以下があげられます。 
</para>

<VariableList>
<VarListEntry>
<Term>
	ErrorResponse
</Term>
<ListItem>
<para>
		<!-- An error has occurred. -->
                エラーが起こりました。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	FunctionResultResponse
</Term>
<ListItem>
<para>
		<!-- The function call was executed and returned a result.
                -->
                  関数呼び出しが処理され結果が返されました。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	FunctionVoidResponse
</Term>
<ListItem>
<para>          <!-- 
		The function call was executed and returned no result. -->
               関数呼び出しは処理されましたが結果は返されませんでした。
         
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	ReadyForQuery
</Term>
<ListItem>
<para>          <!-- 
		Processing of the function call is complete.
		ReadyForQuery will always be sent, whether processing
		terminates successfully or with an error. -->

                関数呼び出しの処理が終了しました。処理が成功またはエラーで
                終了したかどうかにかかわらずReadyForQueryが常に送出されます。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	NoticeResponse
</Term>
<ListItem>
<para>          <!-- 
		A warning message has been issued in relation to the function
		call.
		Notices are in addition to other responses, i.e., the backend
		will continue processing the command. -->

                関数呼び出しに関して警告メッセージが出されました。 
                警告メッセージはバックエンドが命令を引続き処理するという
                他の応答に対する追加のメッセージです。
</para>
</ListItem>
</VarListEntry>
</VariableList>

<para>
<!-- 
A frontend must be prepared to accept ErrorResponse and NoticeResponse
messages whenever it is expecting any other type of message.  Also,
if it issues any listen(l) commands then it must be prepared to accept
NotificationResponse messages at any time; see below. -->

フロントエンドは他の種類のメッセージの到着を待機しているかどうかにかかわらず、 
ErrorResponseとNoticeResponseメッセージを受け取る準備ができていなければ 
なりません。同時にlisten(l) コマンドを送出した場合、常時 
NotificationResponseメッセージを受け取れる準備が
できていなくてはいけません。下記を参照してください。

</para>
</sect2>

<Sect2>
<!-- <Title>Notification Responses</Title> -->
<Title>通知への応答</Title>
<indexterm><primary sortas="ひどうきつうち">非同期通知</primary><secondary sortas="ぷろとこる">プロトコル</secondary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="つうちへのおうとう">通知への応答</secondary></indexterm>
<para>
<!-- 
If a frontend issues a listen(l) command, then the backend will send a
NotificationResponse message (not to be confused with NoticeResponse!)
whenever a notify(l) command is executed for the same notification name.
-->

フロントエンドがlisten(l)命令を送出し、その後これと同じ通知名に対し
notify(l)命令が実行されると、バックエンドはNofificationResponse
メッセージ（NoticeResponseと間違えないように！）を送出します。
</para>

<para>
<!-- 
Notification responses are permitted at any point in the protocol (after
start-up), except within another backend message.  Thus, the frontend
must be prepared to recognize a NotificationResponse message whenever it is
expecting any message.  Indeed, it should be able to handle
NotificationResponse messages even when it is not engaged in a query. -->

（起動後において）通知応答は、他のバックエンドメッセージの処理シーケンスの途中でない限り、任意の時点で発行できます。したがって、フロントエンドは他のメッセージを待機しているかどうかにかかわらずNotificationResponseメッセージを受け取れる準備ができていなければいけません。実際、問い合わせに関与していないときでもNotificationResponseを処理することができなければいけません。 
</para>


<VariableList>
<VarListEntry>
<Term>
	NotificationResponse
</Term>
<ListItem>
<para>          <!--
		A notify(l) command has been executed for a name for which
		a previous listen(l) command was executed.  Notifications
		may be sent at any time. -->

                前のlisten(l)命令が実行された名前に対しnotify(l)命令が実行されました。通知メッセージはいつでも出せる状態です。

</para>
</ListItem>
</VarListEntry>
</VariableList>

<para>
<!-- 
It may be worth pointing out that the names used in listen and notify
commands need not have anything to do with names of relations (tables)
in the SQL database.  Notification names are simply arbitrarily chosen
condition names. -->

listen命令とnotify命令で使用される名前は、SQLデータベース内のリレーション（テーブル）の名前とは関係ない事を指摘しておいたほうがよいでしょう。通知名は単に勝手に選択された状態の名称です。
</para>
</sect2>

<Sect2>
<!--<Title>Cancelling Requests in Progress</Title>-->
<Title>処理中のリクエストの取り消し
</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="しょりちゅうのりくえすとのとりけし">処理中のリクエストの取り消し</secondary></indexterm>
<para>
<!--
During the processing of a query, the frontend may request cancellation of the
query by sending an appropriate request to the postmaster.  The cancel request
is not sent directly to the backend for reasons of implementation efficiency:
we don't want to have the backend constantly checking for new input from
the frontend during query processing.  Cancel requests should be relatively
infrequent, so we make them slightly cumbersome in order to avoid a penalty
in the normal case. -->

問い合わせの処理中に、フロントエンドはpostmasterに対し適切なリクエストを送ることにより、その問い合わせを取り消すことができます。取り消しリクエストは効率を高めるために直接バックエンドには送られません。問い合わせ処理中にバックエンドが定期的にフロントエンドからの入力を確かめる事は、好ましくないからです。取り消しリクエストはたいていの場合、頻繁には起こらないので、通常の状態においての不便を避けるため、多少扱いにくくなっています。

</para>

<para>
<!--
To issue a cancel request, the frontend opens a new connection to the
postmaster and sends a CancelRequest message, rather than the StartupPacket
message that would ordinarily be sent across a new connection.  The postmaster
will process this request and then close the connection.  For security
reasons, no direct reply is made to the cancel request message. -->

取り消しリクエストを出す場合、フロントエンドは通常の新規接続のときに一般的に送出されるStartupPacketではなくてCancelRequestメッセージをpostmasterに送り、新規接続を開始します。postmasterはこのリクエストを処理し、接続を解除します。セキュリティ上の理由から、取り消し要求メッセージに対し直接の回答はありません。

</para>

<para>
<!--
A CancelRequest message will be ignored unless it contains the same key data
(PID and secret key) passed to the frontend during connection start-up.  If the
request matches the PID and secret key for a currently executing backend, the
postmaster signals the backend to abort processing of the current query.
-->

CancelRequestメッセージは、接続開始段階でフロントエンドに送られたのと同一の鍵データ（PIDと秘密鍵）を含んでいない場合は無視されます。現在バックエンドが実行中の処理に対しするPIDと秘密鍵がリクエストと一致した場合、postmasterはバックエンドに対し現在の問い合わせ処理の中止を警告します。

</para>

<para>
<!-- 
The cancellation signal may or may not have any effect___ for example, if it
arrives after the backend has finished processing the query, then it will have
no effect.  If the cancellation is effective, it results in the current
command being terminated early with an error message. -->

取り消しの警告は何の効果も生まないことがあります。たとえば、バックエンドが問い合わせの処理を完了した後に届いた場合、効果がありません。もし取り消し命令が有効であれば、エラーメッセージとともに、現在の命令も終了されます。

</para>

<para>
<!-- 
The upshot of all this is that for reasons of both security and efficiency,
the frontend has no direct way to tell whether a cancel request has succeeded.
It must continue to wait for the backend to respond to the query.  Issuing a
cancel simply improves the odds that the current query will finish soon,
and improves the odds that it will fail with an error message instead of
succeeding. -->

セキュリティと効率の理由によるこれらの結論として、フロントエンドは取り消しリクエストが受け付けられたかどうかを知る方法がないということです。フロントエンドはバックエンドからの問い合わせの回答を待ち続けなければいけません。取り消しを要求することは単に現在の問い合わせを早めに終わらせ、成功ではなくエラーメッセージを出して不成功とする可能性を多少高める程度です。


</para>

<para>
<!--
Since the cancel request is sent to the postmaster and not across the
regular frontend/backend communication link, it is possible for the cancel
request to be issued by any process, not just the frontend whose query is
to be canceled.  This may have some benefits of flexibility in building
multiple-process applications.  It also introduces a security risk, in that
unauthorized persons might try to cancel queries.  The security risk is
addressed by requiring a dynamically generated secret key to be supplied
in cancel requests. -->

取り消しリクエストは、通常のフロントエンドとバックエンドの通信接続を通してではなくpostmasterに送られるため、その問い合わせが取り消されるフロントエンドだけでなくどんなプロセスによっても出される可能性があります。このことはマルチ処理アプリケーションを作るに当たって柔軟性を提供します。同時に、承認されていない者が問い合わせを取り消そうとするといったセキュリティ上のリスクも持ち込みます。セキュリティ上のリスクは取り消しリクエストの際に供給される動的に生成される秘密キーを要求することによって回避されます。

</para>
</sect2>

<Sect2>
<!-- <Title>Termination</Title> -->
<Title>終了</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="しゅうりょう">終了</secondary></indexterm>
<para>
<!-- 
The normal, graceful termination procedure is that the frontend sends a
Terminate message and immediately closes the connection.  On receipt of the
message, the backend immediately closes the connection and terminates.
-->

通常の洗練された終了手順はフロントエンドがTerminateメッセージを出し、すぐに接続を閉じることです。メッセージを受け取るとすぐににバックエンドは接続を閉じ終了します。 
</para>

<para>
<!--An ungraceful termination may occur due to software failure (i.e., core dump)
at either end.  If either frontend or backend sees an unexpected closure of
the connection, it should clean up and terminate.  The frontend has the option
of launching a new backend by recontacting the postmaster, if it doesn't want
to terminate itself.-->

洗練されていない終了はどちらかの側のソフトウェアの失敗（たとえばコアダンプ）によって起こることがあります。フロントエンドかバックエンドいずれかが予期しない接続の中断を検知した場合、問題を片付けて終了しなければいけません。フロントエンドはもし自身が終了を望まない場合、postmasterに再交信し新規のバックエンドを立ち上げる選択権を持っています。
</para>
</sect2>
</sect1>

<Sect1 id="protocol-message-types">
<!-- <Title>Message Data Types</Title>-->
<Title>メッセージのデータ型</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのでーたがた">メッセージのデータ型</secondary></indexterm><indexterm><primary sortas="でーたがた">データ型</primary><secondary sortas="ぷろとこるめっせーじ">プロトコルメッセージ</secondary></indexterm>
<para>
<!-- This section describes the base data types used in messages. -->
ここではメッセージの中で使われる基本的なデータ型を記載します。
</para>

<VariableList>
<VarListEntry>
<Term>
	Int<Replaceable>n</Replaceable>(<Replaceable>i</Replaceable>)
</Term>
<ListItem>
<para>          <!-- 
		An <Replaceable>n</Replaceable> bit integer in network byte 
                order.
                If <Replaceable>i</Replaceable> is specified it
		is the literal value.  Eg. Int16, Int32(42). -->

                ネットワークでのバイトの並び順における<Replaceable>n</Replaceable>ビットの整数。もし<Replaceable>i</Replaceable>が指定されていればそれはリテラル値です。たとえばInt16、Int32(42)など。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString<Replaceable>n</Replaceable>(<Replaceable>s</Replaceable>)
</Term>
<ListItem>
<para>          <!-- 
		A character array of exactly <Replaceable>n</Replaceable> 
                bytes interpreted as a '&bsol;0'
		terminated string.  The '&bsol;0' is omitted if there is
		insufficient room.  If <Replaceable>s</Replaceable> is 
                specified it is the literal value.
		Eg. LimString32, LimString64("user"). -->

                '&bsol;0'で終結した文字列として判断される、厳密に<Replaceable>n</Replaceable>バイトの文字配列。十分な空きがない場合'&bsol;0'は省略されます。<Replaceable>s</Replaceable>が指定れていればそれはリテラル値です。たとえばLimString32、LimString64("user")など。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String(<Replaceable>s</Replaceable>)
</Term>
<ListItem>
<para>          <!--
		A conventional C '&bsol;0' terminated string with no length
		limitation.
		If <Replaceable>s</Replaceable> is specified it is the 
                literal value.
		Eg. String, String("user"). -->

                長さに制限のない従来の'&bsol;0'で終結したC文字列。<Replaceable>s</Replaceable>が指定されていたらそれはリテラル値です。たとえばString, String("user")など。
</para>
		
<Note>
<para>
<!-- 
<Emphasis>There is no predefined limit</Emphasis> on the length of a string
that can be returned by the backend.  Good coding strategy for a frontend
is to use an expandable buffer so that anything that fits in memory can be
accepted.  If that's not feasible, read the full string and discard trailing
characters that don't fit into your fixed-size buffer. -->

バックエンドから返されることが可能な文字列の長さには<Emphasis>事前に設定される制限はありません</Emphasis>。フロントエンドのためのよいコーディング戦略としては、拡張可能なバッファを使ってメモリに収まるものはすべて受け入れられるようにすることです。もしそれが可能でなければ、文字列全部を読み、固定長のバッファに収まらない後ろの文字を捨てます。

</para>
</Note>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte<Replaceable>n</Replaceable>(<Replaceable>c</Replaceable>)
</Term>
<ListItem>
<para>
		<!--
                Exactly <Replaceable>n</Replaceable> bytes.  If 
               <Replaceable>c</Replaceable> is specified it is the literal
		value.  Eg. Byte, Byte1('&bsol;n'). -->

               厳密に<Replaceable>n</Replaceable>バイト。<Replaceable>c</Replaceable>が指定されれば、それはリテラル値です。たとえばByte、Byte1('&bsol;n')など。

</para>
</ListItem>
</VarListEntry>
</VariableList>
</sect1>

<Sect1 id="protocol-message-formats">
<!-- <Title>Message Formats</Title> -->
<Title>メッセージの形式</Title>
<indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary></indexterm>
<para>
<!-- 
This section describes the detailed format of each message.  Each can be sent
by either a frontend (F), a postmaster/backend (B), or both (F & B). -->

ここではそれぞれのメッセージの形式について記載します。それぞれはフロントエンド（F）、postmasterとバックエンド（B）あるいは双方（F &amp; B）から送出されます。
</para>

<VariableList>
<VarListEntry>
<Term>
AsciiRow（B）<indexterm><primary>AsciiRow</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AsciiRow</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('D')
</Term>
<ListItem>
<para>          <!--  
		Identifies the message as an <Acronym>ASCII</Acronym> data row.
		(A prior RowDescription message defines the number of
		fields in the row and their data types.) -->

                <Acronym>ASCII</Acronym>データ列でのメッセージを示します（先行するRowDescriptionメッセージで列の中のフィールド数とそのデータ型を定義します）。


</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>          <!-- 
                A bit map with one bit for each field in the row.  The 1st
                field corresponds to bit 7 (MSB) of the 1st byte, the 2nd
                field corresponds to bit 6 of the 1st byte, the 8th field
                corresponds to bit 0 (LSB) of the 1st byte, the 9th field
                corresponds to bit 7 of the 2nd byte, and so on.  Each bit
                is set if the value of the corresponding field is not NULL.
                If the number of fields is not a multiple of 8, the remainder
                of the last byte in the bit map is wasted. -->

              行の各フィールドに1ビットずつ対応するビットマップです。第1フィールドは第1バイトのビット7（MSB）に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0（LSB）、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしもフィールド数が8の倍数でない場合には、ビット対応における最後のバイトの余りは不要となります。 

</para>
<para>  <!-- 
	Then, for each field with a non-NULL value, there is the following:
        -->

       値がNULLでないそれぞれのフィールドに対して次のものがあります。
</para>
<VariableList>
<VarListEntry>
<Term>
		Int32
</Term>
<ListItem>
<para>                  <!--  
			Specifies the size of the value of the field, including
			this size. -->

                        このサイズを含めたフィールドの値の大きさを指定します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>                  <!--  
			Specifies the value of the field itself in 
                        <Acronym>ASCII</Acronym>
			characters.  <Replaceable>n</Replaceable> is the above
			size minus 4.
                        There is no trailing '&bsol;0' in the field data; the front
			end must add one if it wants one. -->

                        ASCII文字でのフィールドの値そのものの指定です。nは上記のサイズから4を引いたものです。フィールドデータの最後には'&bsol;0'が付いていません。必要ならフロントエンドが付加しなければいけません。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
AuthenticationOk（B）<indexterm><primary>AuthenticationOk</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AuthenticationOk</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('R')
</Term>
<ListItem>
<para>
	<!-- Identifies the message as an authentication request. -->
               メッセージが認証リクエストであることを識別します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(0)
</Term>
<ListItem>
<para>
	<!--	Specifies that the authentication was successful. -->
                認証が成功したことを示します。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
AuthenticationKerberosV4（B）<indexterm><primary>AuthenticationKerberosV4</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AuthenticationKerberosV4</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('R')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as an authentication request. -->
                メッセージが認証要求であることを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(1)
</Term>
<ListItem>
<para>
      <!-- 	Specifies that Kerberos V4 authentication is required. -->
                Kerberos V4の認証が必要なことを指定します。
</para>
</ListItem>
</VarListEntry>
</VariableList>


</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
AuthenticationKerberosV5（B）<indexterm><primary>AuthenticationKerberosV5</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AuthenticationKerberosV5</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('R')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as an authentication request. -->
                メッセージが認証リクエストであること示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(2)
</Term>
<ListItem>
<para>
	<!-- 	Specifies that Kerberos V5 authentication is required. -->
                Kerberos V5の認証が必要なことを指定します。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
AuthenticationUnencryptedPassword（B）<indexterm><primary>AuthenticationUnencryptedPassword</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AuthenticationUnencryptedPassword</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('R')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as an authentication request. -->
                メッセージが認証要求であることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(3)
</Term>
<ListItem>
<para>
	<!-- 	Specifies that an unencrypted password is required. -->
                 暗号化されていないパスワードが必要なことを指定します。
</para>
</ListItem>
</VarListEntry>
</VariableList>


</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
AuthenticationEncryptedPassword（B）<indexterm><primary>AuthenticationEncryptedPassword</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>AuthenticationEncryptedPassword</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('R')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as an authentication request. -->
                メッセージが認証要求であることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(4)
</Term>
<ListItem>
<para>
	<!--	Specifies that an encrypted password is required. -->
	        暗号化されたパスワードが必要であることを指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte2
</Term>
<ListItem>
<para>
	<!--	The salt to use when encrypting the password. -->
                パスワードを暗号化するときに使用するソルトです。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
BackendKeyData（B）<indexterm><primary>BackendKeyData</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>BackendKeyData</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('K')
</Term>
<ListItem>
<para>          <!-- 
		Identifies the message as cancellation key data.
		The frontend must save these values if it wishes to be
		able to issue CancelRequest messages later. -->
                メッセージが取り消しの鍵データであることを示します。フロントエンドは後でCancelRequestメッセージを出すのであればこれらの値を保存しておかなければなりません。


</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The process ID of this backend. -->
                このバックエンドのプロセスIDです。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!--	The secret key of this backend. -->
                このバックエンドの秘密キーです。
</para>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
BinaryRow（B）<indexterm><primary>BinaryRow</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>BinaryRow</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('B')
</Term>
<ListItem>
<para>          <!-- 
		Identifies the message as a binary data row.
		(A prior RowDescription message defines the number of
		fields in the row and their data types.) -->

                メッセージがバイナリデータ列であることを示します（先行するRowDescriptionメッセージで列の中のフィールド数とそのデータ型を定義します）。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>          <!-- 
                A bit map with one bit for each field in the row.  The 1st
                field corresponds to bit 7 (MSB) of the 1st byte, the 2nd
                field corresponds to bit 6 of the 1st byte, the 8th field
                corresponds to bit 0 (LSB) of the 1st byte, the 9th field
                corresponds to bit 7 of the 2nd byte, and so on.  Each bit
                is set if the value of the corresponding field is not NULL.
                If the number of fields is not a multiple of 8, the remainder
                of the last byte in the bit map is wasted. -->

                行の各フィールドに1ビットずつ対応するビットマップです。第1フィールドは第1バイトのビット7（MSB）に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0（LSB）、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしフィールド数が8の倍数でない場合には、ビット対応における最後のバイトの余りは不要となります。

</para>
<para>  <!-- 
	Then, for each field with a non-NULL value, there is the following:
        -->

        値がNULLでないそれぞれのフィールドに対して以下があります。
</para>

<VariableList>
<VarListEntry>
<Term>
		Int32
</Term>
<ListItem>
<para>                  <!--  
			Specifies the size of the value of the field, excluding
			this size. -->

                       このサイズを含めないフィールドの値の大きさを指定します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>                  <!-- 
			Specifies the value of the field itself in binary
			format.  <Replaceable>n</Replaceable> is the above 
                        size. -->

                         バイナリ形式でのフィールドの値そのものを指定します。<Replaceable>n</Replaceable>は上記のサイズです。

</para>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CancelRequest（F）<indexterm><primary>CancelRequest</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CancelRequest</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Int32(16)
</Term>
<ListItem>
<para>
	<!-- 	The size of the packet in bytes. -->
                バイト数によるパケットのサイズ。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32(80877102)
</Term>
<ListItem>
<para>          <!-- 
		The cancel request code.  The value is chosen to contain
		"1234" in the most significant 16 bits, and "5678" in the
		least 16 significant bits.  (To avoid confusion, this code
		must not be the same as any protocol version number.) -->

                取り消し要求のコード。この値は最上位16ビットに「1234」を、また最下位16ビットに「5678」を含むように選ばれます（混乱を避けるため、このコードは他のプロトコルバージョンとは同一でありません）。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The process ID of the target backend. -->
                目的とするバックエンドのプロセスIDです。
</para>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The secret key for the target backend. -->
                目的とするバックエンドの秘密キーです。
</para>
</ListItem>
</VarListEntry>
</VariableList>


</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CompletedResponse（B）<indexterm><primary>CompletedResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CompletedResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('C')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a completed response. -->
                メッセージが完了した回答であることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>          <!-- 
		The command tag.  This is usually (but not always) a single
		word that identifies which SQL command was completed. -->
                コマンドタグ。これは通常（常にではありません）どのSQL命令が完了したかを示す1単語です。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CopyDataRows（B &amp; F）<indexterm><primary>CopyDataRows</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CopyDataRows</tertiary></indexterm>
</Term>
<ListItem>
<para>  <!-- 
	This is a stream of rows where each row is terminated by a Byte1('&bsol;n').
	This is then followed by the sequence Byte1('&bsol;&bsol;'), Byte1('.'),
	Byte1('&bsol;n'). -->

        連続する行データで、各行はByte1('&bsol;n')で終わります。すべてのデータの一番 最後にはByte1('&bsol;&bsol;')、Byte1('.')、Byte1('&bsol;n')というシーケンスが来ます。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CopyInResponse（B）<indexterm><primary>CopyInResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CopyInResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('G')
</Term>
<ListItem>
<para>          <!--  
		Identifies the message as a Start Copy In response.
		The frontend must now send a CopyDataRows message. -->

               メッセージが「コピーインの開始」であることを示します。このコマンドには、さらにCopyDataRowsメッセージが続きます。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CopyOutResponse（B）<indexterm><primary>CopyOutResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CopyOutResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('H')
</Term>
<ListItem>
<para>          <!--
		Identifies the message as a Start Copy Out response.
		This message will be followed by a CopyDataRows message.
                -->

               メッセージが「コピーアウトの開始」であることを示します。このコマンドには、さらにCopyDataRowsメッセージが続きます。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
CursorResponse（B）<indexterm><primary>CursorResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>CursorResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('P')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a cursor response. -->
                メッセージがカーソル回答であることを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>          <!-- 
		The name of the cursor.  This will be "blank" if the cursor is
		implicit. -->

                カーソルの名称。カーソル名を明示的に指定しなかった場合、これは「blank」という文字列になります。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
EmptyQueryResponse（B）<indexterm><primary>EmptyQueryResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>EmptyQueryResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('I')
</Term>
<ListItem>
<para>          <!--  
		Identifies the message as a response to an empty query string.
                -->
                メッセージが空の問い合わせ文字列の回答であることを示します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String("")
</Term>
<ListItem>
<para>
	<!--	Unused. -->
        未使用。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
EncryptedPasswordPacket（F）<indexterm><primary>EncryptedPasswordPacket</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>EncryptedPasswordPacket</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The size of the packet in bytes. -->
                バイト数によるパケットのサイズ。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The encrypted (using crypt()) password. -->
                暗号化された（crypt()を使用）パスワードです。
</para>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
ErrorResponse（B）<indexterm><primary>ErrorResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>ErrorResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('E')
</Term>
<ListItem>
<para>
	<!--	Identifies the message as an error. -->
                エラーのメッセージを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The error message itself. -->
                エラーメッセージそのもの。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
FunctionCall（F）<indexterm><primary>FunctionCall</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>FunctionCall</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('F')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a function call. -->
                メッセージが関数呼び出しであることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String("")
</Term>
<ListItem>
<para>
	<!--	Unused. -->
                未使用。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	Specifies the object ID of the function to call. -->
                呼び出す関数のオブジェクトIDを指定します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>          <!-- 
		Specifies the number of arguments being supplied to the
		function. -->
                関数に渡される引数の数を指定します。

</para>
<para>
	<!-- Then, for each argument, there is the following: -->
             それぞれの引数に対して以下のものがあります。
</para>
<VariableList>
<VarListEntry>
<Term>
		Int32
</Term>
<ListItem>
<para>                  <!--  
			Specifies the size of the value of the argument,
			excluding this size. -->

                        このサイズを除いた引数の値のサイズの指定。 
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>                  <!--  
			Specifies the value of the field itself in binary
			format.  <Replaceable>n</Replaceable> is the above 
                        size. -->

                        バイナリ形式でのフィールドそのものの値を指定します。<Replaceable>n</Replaceable>は上記のサイズです。


</para>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
</VariableList>


</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
FunctionResultResponse（B）<indexterm><primary>FunctionResultResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>FunctionResultResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('V')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a function call result. -->
                メッセージが関数呼び出しの結果であることを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte1('G')
</Term>
<ListItem>
<para>
	<!-- 	Specifies that a nonempty result was returned. -->
                空でない結果が返されたことを指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>          <!--  
		Specifies the size of the value of the result, excluding this
		size. -->

                このサイズを除いた結果の値のサイズを指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte<Replaceable>n</Replaceable>
</Term>
<ListItem>
<para>          <!-- 
		Specifies the value of the result itself in binary format.
		<Replaceable>n</Replaceable> is the above size. -->
                バイナリ形式で結果の値そのものを指定します。<Replaceable>n</Replaceable>は上記のサイズです。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte1('0')
</Term>
<ListItem>
<para>          <!-- 
		Unused.  (Strictly speaking, FunctionResultResponse and
		FunctionVoidResponse are the same thing but with some optional
		parts to the message.) -->
                未使用（厳密には、FunctionResultResponseとFunctionVoidResponseは同一のものですが、メッセージに対していくつかの選択部分があります）。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
FunctionVoidResponse（B）<indexterm><primary>FunctionVoidResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>FunctionVoidResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('V')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a function call result. -->
                メッセージが関数呼び出しの結果であることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Byte1('0')
</Term>
<ListItem>
<para>
	<!-- 	Specifies that an empty result was returned. -->
                空の結果が返されたことを指定します。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
NoticeResponse（B）<indexterm><primary>NoticeResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>NoticeResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('N')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a notice. -->
                メッセージが通知であることを識別します。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The notice message itself. -->
                通知メッセージそのものです。
</para>

</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
NotificationResponse（B）<indexterm><primary>NotificationResponse</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>NotificationResponse</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('A')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a notification response. -->
                メッセージが通知に関する回答であることを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The process ID of the notifying backend process. -->
                バックエンドプロセスを通知するプロセスID。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The name of the condition that the notify has been raised on.
         -->

        通知が出された状況の名称です。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
Query（F）<indexterm><primary>Query</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>Query</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('Q')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a query. -->
                メッセージが問い合わせであることを示します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The query string itself. -->
        問い合わせ文字列そのもの。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
ReadyForQuery（B）<indexterm><primary>ReadyForQuery</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>ReadyForQuery</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('Z')
</Term>
<ListItem>
<para>          <!-- 
		Identifies the message type.  ReadyForQuery is sent
		whenever the backend is ready for a new query cycle. -->
                
                メッセージの型を示します。バックエンドが新規の問い合わせサイクルに入れる場合ReadyForQueryが送られます。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
RowDescription（B）<indexterm><primary>RowDescription</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>RowDescription</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('T')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a row description. -->
                メッセージが行の解説であることを識別します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int16
</Term>
<ListItem>
<para>
	<!-- 	Specifies the number of fields in a row (may be zero). -->
                行のフィールド数（0の場合もある）を指定します。
</para>
<para>
	<!-- Then, for each field, there is the following: -->
             それぞれのフィールドに対し以下のものがあります。 
</para>
<VariableList>
<VarListEntry>
<Term>
		String
</Term>
<ListItem>
<para>
		<!-- 	Specifies the field name. -->
                        フィールドの名称を指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Int32
</Term>
<ListItem>
<para>
		<!-- 	Specifies the object ID of the field type. -->
                        フィールドの型のオブジェクトIDを指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Int16
</Term>
<ListItem>
<para>
		<!-- 	Specifies the type size. -->
                型のサイズを指定します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
		Int32
</Term>
<ListItem>
<para>
		<!--	Specifies the type modifier. -->
                 修飾子の型を指定します。 
</para>
</ListItem>
</VarListEntry>
</VariableList>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
StartupPacket（F）<indexterm><primary>StartupPacket</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>StartupPacket</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Int32(296)
</Term>
<ListItem>
<para>
	<!-- 	The size of the packet in bytes. -->
                バイトでのパケットのサイズ。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>          <!-- 
		The protocol version number.  The most significant 16 bits are
		the major version number.  The least 16 significant bits are
		the minor version number. -->

               プロトコルのバージョン番号。最上位16ビットはメジャーバージョン番号です。最下位16ビットはマイナーバージョン番号を表します。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString64
</Term>
<ListItem>
<para>
	<!-- 	The database name, defaults to the user name if empty. -->
               データベースの名前で、空であればユーザー名がデフォルトになります。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString32
</Term>
<ListItem>
<para>
	<!-- 	The user name. -->
                ユーザー名。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString64
</Term>
<ListItem>
<para>          <!-- 
		Any additional command line arguments to be passed to the
		backend by the postmaster. -->
                postmasterからバックエンドに渡される任意の追加のコマンドライン引数。

</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString64
</Term>
<ListItem>
<para>        
	<!-- 	Unused. -->
        未使用。
</para>
</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	LimString64
</Term>
<ListItem>
<para>          
	<!--	The optional tty the backend should use for debugging messages.
        -->
                バックエンドがメッセージのバグ取りに使用すべき任意のttyです。

</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
Terminate（F）<indexterm><primary>Terminate</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>Terminate</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Byte1('X')
</Term>
<ListItem>
<para>
	<!-- 	Identifies the message as a termination. -->
                メッセージが終了であることを識別します。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
UnencryptedPasswordPacket（F）<indexterm><primary>UnencryptedPasswordPacket</primary></indexterm><indexterm><primary sortas="ぷろとこる">プロトコル</primary><secondary sortas="めっせーじのけいしき">メッセージの形式</secondary><tertiary>>UnencryptedPasswordPacket</tertiary></indexterm>
</Term>
<ListItem>

<VariableList>
<VarListEntry>
<Term>
	Int32
</Term>
<ListItem>
<para>
	<!-- 	The size of the packet in bytes. -->
                バイト数によるパケットのサイズです。
</para>

</ListItem>
</VarListEntry>
<VarListEntry>
<Term>
	String
</Term>
<ListItem>
<para>
	<!-- 	The unencrypted password. -->
                暗号化されていないパスワードです。
</para>
</ListItem>
</VarListEntry>
</VariableList>

</ListItem>
</VarListEntry>
</VariableList>

</sect1>
</Chapter>
