<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/copy.sgml,v 1.8 2001/09/03 05:07:53 i-kaori Exp $
Postgres documentation
-->

<refentry id="SQL-COPY">
 <refmeta>
  <refentrytitle id="sql-copy-title">
   COPY
  </refentrytitle>
  <refmiscinfo>SQL<!-- - Language Statements-->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   COPY
  </refname>
  <refpurpose>
   <!--Copies data between files and tables-->
   ファイルとテーブルの間でデータをコピーします。<indexterm><primary>COPY</primary></indexterm><indexterm><primary>SQL</primary><secondary>COPY</secondary></indexterm><indexterm><primary sortas="こぴー">コピー</primary></indexterm>
  </refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-12-11</date>
  </refsynopsisdivinfo>
<synopsis>
COPY [ BINARY ] <replaceable class="parameter">table</replaceable> [ WITH OIDS ]
    FROM { '<replaceable class="parameter">filename</replaceable>' | <filename>stdin</filename> }
    [ [USING] DELIMITERS '<replaceable class="parameter">delimiter</replaceable>' ]
    [ WITH NULL AS '<replaceable class="parameter">null string</replaceable>' ]
COPY [ BINARY ] <replaceable class="parameter">table</replaceable> [ WITH OIDS ]
    TO { '<replaceable class="parameter">filename</replaceable>' | <filename>stdout</filename> }
    [ [USING] DELIMITERS '<replaceable class="parameter">delimiter</replaceable>' ]
    [ WITH NULL AS '<replaceable class="parameter">null string</replaceable>' ]
</synopsis>
  
  <refsect2 id="R2-SQL-COPY-1">
   <refsect2info>
    <date>1998-09-08</date>
   </refsect2info>
   <title>
    <!--Inputs-->入力
   </title>

    <variablelist>
     <varlistentry>
      <term>BINARY</term>
      <listitem>
       <para>
	<!--Changes the behavior of field formatting, forcing all data to be
	stored or read in binary format rather than as text.
	The DELIMITERS and WITH NULL options are irrelevant for binary format.-->
        フィールドのフォーマットをすべてのデータをテキストではなくバイナリで読み書きするように設定します。バイナリフォーマットでは、DELIMITERSとWITH NULLのオプションは無意味となります。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="parameter">table</replaceable></term>
      <listitem>
       <para>
	<!--The name of an existing table.-->
        既存のテーブルの名前です。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>WITH OIDS</term>
      <listitem>
       <para>
	<!--Specifies copying the internal unique object id (OID) for each row.-->
        それぞれの行に対する内部的な一意のオブジェクトID（OID）をコピーすることを指定します。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="parameter">filename</replaceable></term>
      <listitem>
       <para>
	<!--The absolute Unix pathname of the input or output file.-->
        入出力ファイルのUnix絶対パス名です。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><filename>stdin</filename></term>
      <listitem>
       <para>
	<!--Specifies that input comes from the client application.-->
        入力がクライアントアプリケーションからのものであることを指定します。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><filename>stdout</filename></term>
      <listitem>
       <para>
	<!--Specifies that output goes to the client application.-->
        出力がクライアントアプリケーションへのものであることを指定します。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="parameter">delimiter</replaceable></term>
      <listitem>
       <para>
	<!--The character that separates fields within each row (line) of the file.-->
        ファイルの各行（ライン）のフィールドを区切る文字を指定します。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="parameter">null string</replaceable></term>
      <listitem>
       <para>
        <!--The string that represents a NULL value. The default is
        <quote><literal>&bsol;N</literal></quote> (backslash-N).
	You might prefer an empty string, for example.-->

        NULLの値を表す文字列です。デフォルトでは<quote><literal>&bsol;N</literal></quote>（バックスラッシュN）です。しかし、場合によっては、空の文字列の方がよいかも知れません。
       </para>
       <note>
        <para>
         <!--On a copy in, any data item that matches this string will be stored as
         a NULL value, so you should make sure that you use the same string
         as you used on copy out.-->

         コピーをして読み込む際、この文字列と一致するデータ要素はNULL値として格納されます。したがって、そのときには、コピーを行ったときに使用した同じ文字列を使用したかどうか確認してください。
        </para>
       </note>
      </listitem>
     </varlistentry>

    </variablelist>
  </refsect2>
  
  <refsect2 id="R2-SQL-COPY-2">
   <refsect2info>
    <date>1998-09-08</date>
   </refsect2info>
   <title>
    <!--Outputs-->出力
   </title>

    <variablelist>
     <varlistentry>
      <term><computeroutput>
COPY
       </computeroutput></term>
      <listitem>
       <para>
	<!--The copy completed successfully.-->
        コピーは正常に終了しました。
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><computeroutput>
ERROR: <replaceable>reason</replaceable>
       </computeroutput></term>
      <listitem>
       <para>
	<!--The copy failed for the reason stated in the error message.-->
        エラーメッセージに表示された理由によってコピーは失敗しました。
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
 </refsynopsisdiv>
 
 <refsect1 id="R1-SQL-COPY-1">
  <refsect1info>
   <date>2001-01-02</date>
  </refsect1info>
  <title>
   <!--Description-->説明
  </title>
  <para>
   <!--<command>COPY</command> moves data between
   <productname>Postgres</productname> tables and
   standard file-system files.-->

   <command>COPY</command>コマンドは、<productname>Postgres</productname>のテーブルと標準のファイルシステムのファイル間でデータを移動します。

   <!--<command>COPY TO</command> copies the entire contents of a table to
   a file, while <command>COPY FROM</command> copies data from a file to a
   table (appending the data to whatever is in the table already).-->

   <command>COPY TO</command>コマンドはテーブルのすべての内容をファイルにコピーします。また、<command>COPY FROM</command>コマンドはファイルからテーブルへとデータをコピーします（このとき、すでにテーブルにあるデータにコピー内容を追加します）。<indexterm><primary>COPY TO</primary></indexterm><indexterm><primary>COPY FROM</primary></indexterm><indexterm><primary>SQL</primary><secondary>COPY</secondary></indexterm><indexterm><primary>SQL</primary><secondary>COPY FROM</secondary></indexterm>
  </para>

  <para>
   <!--<command>COPY</command> instructs
   the <productname>Postgres</productname> backend
   to directly read from or write to a file. If a file name is specified,
   the file must be accessible to the backend and the name must be specified
   from the viewpoint of the backend.
   If <filename>stdin</filename> or <filename>stdout</filename> is
   specified, data flows through the client frontend to  the backend.-->

   <command>COPY</command>コマンドは、<productname>Postgres</productname>のバックエンドに対して直接ファイルへの読み書きをするように伝えます。ファイル名が指定された場合は、そのファイルは必ずバックエンドから接続でき、またファイル名はバックエンドからみたように指定されなければなりません。<filename>stdin</filename>や<filename>stdout</filename>が指定された場合、データはクライアントのフロントエンドからバックエンドに流れます。
</para>

    <tip>
     <para>
      <!--Do not confuse <command>COPY</command> with the
      <application>psql</application> instruction <command>&bsol;copy</command>.
      <command>&bsol;copy</command> invokes <command>COPY FROM stdin</command> 
      or <command>COPY TO stdout</command>, and then fetches/stores the data
      in a file accessible to the <application>psql</application> client.
      Thus, file accessibility and access rights depend on the client
      rather than the backend when <command>&bsol;copy</command> is used.-->

      <command>COPY</command>は<application>psql</application>の<command>&bsol;copy</command>とは異なるものであることに注意してください。<command>&bsol;copy</command>は<command>COPY FROM stdin</command>や<command>COPY TO stdout</command>を呼び出し、<application>psql</application>クライアントから接続できるファイルにデータの書き込み/読み込みを行います。したがって、<command>&bsol;copy</command>コマンドが使用された場合には、ファイルへの接続と接続権限は、バックエンドではなく、クライアント側に依存します。
     </para>
    </tip>

  <refsect2 id="R2-SQL-COPY-3">
   <refsect2info>
    <date>2001-01-02</date>
   </refsect2info>
   <title>
    <!--Notes-->注釈
   </title>
   <para>
    <!--The BINARY keyword will force all data to be
    stored/read as binary format rather than as text.  It is
    somewhat faster than the normal copy command, but a binary copy
    file is not portable across machine architectures.-->

    キーワードBINARYはすべてのデータをテキストではなく、バイナリオブジェクトとして書き込み/読み込みするよう指定にします。通常のCOPYコマンドより多少速く動作しますが、バイナリのコピーファイルは動作マシンの基本構造によって移植性に欠けます。
 
    </para>

    <para>
    <!--By default, a text copy uses a tab ("&bsol;t") character as a delimiter
    between fields.  The field delimiter may be changed to any other single
    character with the keyword phrase USING DELIMITERS.  Characters
    in data fields which happen to match the delimiter character will
    be backslash quoted.
    Note that the delimiter is always a single character.
    If multiple characters are specified in the delimiter string,
    only the first character is used.-->

    デフォルトではテキストコピーはフィールドの区切り文字としてタブ（"&bsol;t"）を使用します。フィールドの区切り文字はUSING DELIMITERSというキーワードを用いて、別の任意の1文字に変更することができます。区切り文字にたまたま一致するデータフィールド中の文字はバックスラッシュで囲まれます。区切り文字は必ず1文字であることに注意してください。2字以上の文字が指定された場合には、最初の1字が区切り文字として使用されます。<indexterm><primary>USING DELIMITERS</primary></indexterm><indexterm><primary>COPY</primary><secondary>USING DELIMITERS</secondary></indexterm>

   </para>
   
   <para>
    <!--You must have <firstterm>select access</firstterm> on any table
    whose values are read by
    <command>COPY</command>, and either
    <firstterm>insert</firstterm> or <firstterm>update access</firstterm> to a
    table into which values are being inserted by <command>COPY</command>.
    The backend also needs appropriate Unix permissions for any file read
    or written by <command>COPY</command>.-->

    <command>COPY</command>コマンドによって値が読み込まれるテーブルに関して<firstterm>selectを実行する権限</firstterm>を持っている必要があります。また、<command>COPY</command>コマンドによって値が挿入されるテーブルに対しても<firstterm>insert</firstterm>や<firstterm>update権限</firstterm>が必要です。それに加え、バックエンドは<command>COPY</command>によって読み書きされるファイルに適切なUnixの権限が与えられている必要があります。
   </para>

   <para>
    <!--<command>COPY TO</command> neither invokes rules nor acts on column
    defaults.  It does invoke triggers and check constraints.-->

    <command>COPY TO</command>コマンドはルールを呼び出したり、列のデフォルトに影響を与えることは行いません。トリガと検査制約は呼び出します。
   </para>

   <para>
    <!--<command>COPY</command> stops operation at the first error.  This
    should not lead to problems in the event of
    a <command>COPY FROM</command>, but the
    target relation will already have received earlier rows in a
    <command>COPY TO</command>.  These rows will not be visible or
    accessible, but they still occupy disk space.  This may amount to a
    considerable amount
    of wasted disk space if the failure happened well into a large copy
    operation.  You may wish to invoke <command>VACUUM</command> to recover
    the wasted space.-->

    <command>COPY</command>では、最初のエラーで処理を停止させます。これは、<command>COPY FROM</command>コマンドを実行している際には何ら問題はありませんが、対象となるリレーションは<command>COPY TO</command>の始めのほうの行を受け取り済みです。これらの行は見えませんし、接続することもできませんが、ディスク領域を占有します。大きなコピー処理に失敗した場合には無駄なディスク領域が増えてしまいます。この無駄な領域を取り戻すために、<command>VACUUM</command>を行う必要があります。
   </para>

   <para>
    <!--Files named in a <command>COPY</command> command are read or written
    directly by the backend, not by the client application.  Therefore,
    they must reside on or be accessible to the database server machine,
    not the client.  They must be accessible to and readable or writable
    by the Postgres user (the userid the backend runs as), not the client.
    <command>COPY</command> naming a file is only allowed to database
    superusers, since it allows writing on any file that the backend has
    privileges to write on.-->

    <command>COPY</command>で指名されたファイルはクライアントアプリケーションではなく、バックエンドが直接読み込み/書き込みを行います。したがって、それらはデータベースサーバー上に存在するか、または、クライアントではなくサーバーから接続可能である必要があります。また、クライアントではなくPostgresユーザー（バックエンドを実行しているユーザーID）で読み書きができる必要もあります。<command>COPY</command>でファイルを指名するのは、データベースのスーパーユーザーのみに許可されています。これは、バックエンドが書き込み権限を持っているどんなファイルに対しても書き込みを許可するためです。
</para>

    <tip>
     <para>
      <!--The
      <application>psql</application> instruction <command>&bsol;copy</command>
      reads or writes files on the client machine with the client's
      permissions, so it is not restricted to superusers.-->

      <application>psql</application>の<command>&bsol;copy</command>はクライアントの権限で、クライアントのマシンにて読み書きを行います。したがって、スーパーユーザーの権限は必要ありません。
     </para>
    </tip>

   <para>
    <!--It is recommended that the filename used in <command>COPY</command>
    always be specified as an absolute path.  This is enforced by the backend
    in the case of <command>COPY TO</command>, but for <command>COPY
    FROM</command> you do have the option of reading from a file specified
    by a relative path.  The path will be interpreted relative to the
    backend's working directory (somewhere below
    <filename>$PGDATA</filename>), not the client's working directory.-->

    <command>COPY</command>で指定されるファイル名は絶対パスで記述されることをお勧めします。<command>COPY TO</command>コマンドの場合ではバックエンドによって強制的にそうなりますが、<command>COPY FROM</command>コマンドでは相対パスによって指定されたファイルを読み込むことも可能となっています。そのパスは、クライアントの作業環境ではなく、バックエンドの作業環境（<filename>$PGDATA</filename>の下のどこか）と連携して解釈されます。
   </para>
  </refsect2>
 </refsect1>
 
 <refsect1 id="R1-SQL-COPY-2">
  <refsect1info>
   <date>2001-01-02</date>
  </refsect1info>
  <title><!--File Formats-->ファイル形式</title>
  <refsect2>
   <refsect2info>
    <date>2001-01-02</date>
   </refsect2info>
   <title><!--Text Format-->テキスト形式</title>
<indexterm><primary sortas="こぴー">コピー</primary><secondary sortas="てきすとけいしき">テキスト形式</secondary></indexterm>
   <para>
    <!--When <command>COPY TO</command> is used without the BINARY option,
    the file generated will have each row (instance) on a single line, with each
    column (attribute) separated by the delimiter character.  Embedded
    delimiter characters will be preceded by a backslash character
    ("&bsol;").  The attribute values themselves are strings generated by the
    output function associated with each attribute type.  The output
    function for a type should not try to generate the backslash
    character; this will be handled by <command>COPY</command> itself.-->

    <command>COPY TO</command>がBINARYオプションなしで使用されると、生成されたファイルは、それぞれの列（属性）が区切り文字で区切られた1行ごとの行（インスタンス）から構成されます。データの中にある区切り文字にはバックスラッシュ（"&bsol;"）が付きます。属性値そのものはそれぞれの属性の型に対応した出力関数によって生成された文字列です。型の出力関数はバックスラッシュ文字の生成に関与してはいけません。<command>COPY</command>自身がこれを取り扱います。
   </para>
   <para>
    <!--The actual format for each instance is-->
    それぞれのインスタンスの実際の形式は下記のようになります。
</para>

<programlisting>
&lt;attr1&gt;&lt;<replaceable class=parameter>separator</replaceable>&gt;&lt;attr2&gt;&lt;<replaceable class=parameter>separator</replaceable>&gt;...&lt;<replaceable class=parameter>separator</replaceable>&gt;&lt;attr<replaceable class="parameter">n</replaceable>&gt;&lt;newline&gt;
</programlisting>

<para>
    <!--Note that the end of each row is marked by a Unix-style newline
    ("&bsol;n").  <command>COPY FROM</command> will not behave as desired
    if given a file containing DOS- or Mac-style newlines.-->

    すべての行の終わりにはUnix形式の改行文字（"&bsol;n"）であることに注意してください。<command>COPY FROM</command>では、MS-DOSやMac形式の改行が含まれているファイルに対しては、期待どおりの動作を行いません。
   </para>
   <para>
    <!--The OID is emitted as the first column if WITH OIDS is specified.-->
    WITH OIDSが指定された場合、OIDが行の先頭に付きます。
   </para>
   <para>
    <!--If <command>COPY TO</command> is sending its output to standard
    output instead of a file, after the last row it will send a backslash ("&bsol;")
    and a period (".") followed by a newline.
    Similarly, if <command>COPY FROM</command> is reading
    from standard input, it will expect a backslash ("&bsol;") and a period
    (".") followed by a newline, as the first three characters on a
    line to denote end-of-file.  However, <command>COPY FROM</command>
    will terminate correctly (followed by the backend itself) if the
    input connection is closed before this special end-of-file pattern is
    found.-->

    <command>COPY TO</command>が出力をファイルではなく、標準出力に出す場合、行の最後にバックスラッシュ（"&bsol;"）とピリオド（"."）を送出し、そのあと改行を行います。同様に、<command>COPY FROM</command>が標準入力からデータを読み込む場合は、ファイルの終了（end-of-file）を規定する行の始めの3文字として、バックスラッシュ（"&bsol;"）とピリオド（"."）とそれに引き続く改行があることを前提とします。しかし、この特殊なファイル終了の形式が検出される前に入力接続が閉ざされた場合でも、正常に終了されます（バックエンドも引き続いて終了します）。
    
   </para>
   <para>
    <!--The backslash character has other special meanings.  A literal backslash
    character is represented as two
    consecutive backslashes ("&bsol;&bsol;").  A literal tab character is represented
    as a backslash and a tab.  (If you are using something other than tab
    as the column delimiter, backslash that delimiter character to include
    it in data.)  A literal newline character is
    represented as a backslash and a newline.  When loading text data
    not generated by <acronym>Postgres</acronym>,
    you will need to convert backslash
    characters ("&bsol;") to double-backslashes ("&bsol;&bsol;") to ensure that they 
    are loaded properly.-->

    バックスラッシュには別の特別な意味があります。バックスラッシュ文字そのものは2つの連続したバックスラッシュ（"&bsol;&bsol;"）で表現されます。タブ文字そのものはバックスラッシュとタブで表現されます（列の区切り文字としてタブを使用していない場合は、データに含めるためにその区切り文字にバックスラッシュを付けてください）。改行そのものはバックスラッシュと改行で表現されます。<acronym>Postgres</acronym>で生成されたものでないテキストデータを読み込むときは、正常に読み込みを行うためにバックスラッシュ（"&bsol;"）を2つのバックスラッシュ（"&bsol;&bsol;"）に変換する必要があります。
   </para>
  </refsect2>

  <refsect2>
   <refsect2info>
    <date>2001-01-02</date>
   </refsect2info>
   <title><!--Binary Format-->バイナリ形式</title>
<indexterm><primary sortas="こぴー">コピー</primary><secondary sortas="ばいなりけいしき">バイナリ形式</secondary></indexterm>
   <para>
    <!--The file format used for <command>COPY BINARY</command> changed in
    Postgres v7.1.  The new format consists of a file header, zero or more
    tuples, and a file trailer.-->

    <command>COPY BINARY</command>で使用されるファイル形式はPostgreSQL 7.1で、変更されました。新しい形式はファイルヘッダー、0以上のタプル、ファイルトレーラーで構成されています。
   </para>

   <refsect3>
    <refsect3info>
     <date>2001-01-02</date>
    </refsect3info>
    <title>
     <!--File Header-->ファイルヘッダー
    </title>
    <para>
     <!--The file header consists of 24 bytes of fixed fields, followed
     by a variable-length header extension area.  The fixed fields are:-->

     ファイルヘッダーは24バイトの固定フィールドで構成され、その後に可変長の拡張ヘッダーがあります。固定フィールドは下記のとおりです。
</para>

    <variablelist>
     <varlistentry>
      <term>シグネチャ（Signature）</term>
      <listitem>
       <para>
<!--12-byte sequence "PGBCOPY&bsol;n&bsol;377&bsol;r&bsol;n&bsol;0" - note that the null
is a required part of the signature.  (The signature is designed to allow
easy identification of files that have been munged by a non-8-bit-clean
transfer.  This signature will be changed by newline-translation
filters, dropped nulls, dropped high bits, or parity changes.)-->

12バイトのシーケンス"PGBCOPY&bsol;n&bsol;377&bsol;r&bsol;n&bsol;0"――NULLはシグネチャで必ず必要であることに注意してください（シグネチャはきれいに8ビットで転送されなかったファイルを容易に識別できるように設計されています。このシグネチャは改行変換のフィルター、消えてしまったNULL、上位ビット落ち、パリティの変更などによって変更されます）。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>整数レイアウトフィールド（Integer layout field）</term>
      <listitem>
       <para>
<!--int32 constant 0x01020304 in source's byte order.
Potentially, a reader could engage in byte-flipping of subsequent fields
if the wrong byte order is detected here.-->

ソースのバイト並びにおけるint32の定数0x01020304。不正なバイト並びが順が検出された場合、潜在的に読み込み先は引き続くフィールドのバイトをひっくり返すことができるようになります。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>フラグフィールド（Flags field）</term>
      <listitem>
       <para>
<!--int32 bit mask to denote important aspects of the file
format.  Bits are numbered from 0 (LSB) to 31 (MSB) - note that this
field is stored with source's endianness, as are all subsequent integer
fields.  Bits 16-31 are reserved to denote critical file format issues;
a reader should abort if it finds an unexpected bit set in this range.
Bits 0-15 are reserved to signal backwards-compatible format issues;
a reader should simply ignore any unexpected bits set in this range.
Currently only one flag bit is defined, and the rest must be zero:-->

ファイル形式の重要部分を示すint32ビットマスク。ビットは0（LSB）から31（MSB）までの番号が付けられます。このフィールドがソースのエンディアン性として格納され、すべての後続の整数のフィールドでも同様です。ビットの16-31は重要なファイル形式に関連することを示すために予約されています。読み込み先はこの範囲に予期していないビットの列を発見した際には、そのファイルを破棄する必要があります。ビット0〜ビット15は順序の両立性のあるファイル形式であるかの合図を行うために予約されています。読み込み先はこの範囲に予期していないビットの列を発見した際には、無視しなくてはなりません。現在では、1つのフラグビットのみが定義されて、他はすべて0となります。
</para>
        <variablelist>
         <varlistentry>
          <term>Bit 16</term>
          <listitem>
           <para>
            <!--if 1, OIDs are included in the dump; if 0, not-->
            もし1ならばOIDがダンプに含まれます。0の場合には含まれません。
           </para>
          </listitem>
         </varlistentry>
        </variablelist>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>拡張ヘッダー領域長（Header extension area length）</term>
      <listitem>
       <para>
<!--int32 length in bytes of remainder of header, not including self.  In
the initial version this will be zero, and the first tuple follows
immediately.  Future changes to the format might allow additional data
to be present in the header.  A reader should silently skip over any header
extension data it does not know what to do with.-->

それ自身を含まない、ヘッダーの残余のint32のバイト長。初期のバージョンでは、これは0で、そのすぐ後に最初のタプルが続きます。今後の形式の変更では、ヘッダーに表示させる情報の追加があるかもしれません。読み込み先は、どのような対処を行えばいいのかがわからないヘッダーに関しては、ヘッダーを飛ばす必要があります。
       </para>
      </listitem>
     </varlistentry>
    </variablelist>

    <para>
<!--The header extension area is envisioned to contain a sequence of
self-identifying chunks.  The flags field is not intended to tell readers
what is in the extension area.  Specific design of header extension contents
is left for a later release.-->

拡張ヘッダー領域は自己確認のチャンクのシーケンスを保持するために考えられています。フラグフィールドは読み込み先に拡張領域の内容を知らせるものではありません。特定の拡張ヘッダー内容のデザインは後のリリースのために残してあります。
    </para>

    <para>
     <!--This design allows for both backwards-compatible header additions (add
     header extension chunks, or set low-order flag bits) and
     non-backwards-compatible changes (set high-order flag bits to signal such
     changes, and add supporting data to the extension area if needed).-->

     このデザインは、順序の両立性のあるヘッダーの追加（拡張ヘッダーチャンク、または下位フラグビット）と両立性のない変更（変更を合図するために高位フラグビットを設定し、必要に応じて拡張領域にサポート情報を追加する）に有効です。
    </para>
   </refsect3>

   <refsect3>
    <refsect3info>
     <date>2001-01-02</date>
    </refsect3info>
    <title>
     <!--Tuples-->タプル
    </title>
<indexterm><primary sortas="こぴー">コピー</primary><secondary sortas="たぷる">タプル</secondary></indexterm>
    <para>
<!--Each tuple begins with an int16 count of the number of fields in the
tuple.  (Presently, all tuples in a table will have the same count, but
that might not always be true.)  Then, repeated for each field in the
tuple, there is an int16 typlen word possibly followed by field data.
The typlen field is interpreted thus:-->
<!-- 訳し忘れ  -->
すべてのタプルはタプル内のint16でのフィールド数から始まります（現時点では、テーブル内のすべてのタプルは同一のフィールド数を持っようになっていますが、常にそうであるとは限りません）。ですから、タプル中のそれぞれのフィールドで繰り返されて、フィールドデータの前にint16のtyplenが付随します。typlenフィールドはこのように解釈されます。
</para>


    <variablelist>
     <varlistentry>
      <term>ゼロ（Zero）</term>
      <listitem>
       <para>
	<!--Field is NULL.  No data follows.-->
        フィールドがNULLで、後続するデータがない
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>&gt; 0</term>
      <listitem>
       <para>
        <!--Field is a fixed-length datatype.  Exactly N
	bytes of data follow the typlen word.-->
        フィールドは固定長のデータ型で、typlenの後にちょうどNバイトのデータがある
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>-1</term>
      <listitem>
       <para>
	<!--Field is a varlena datatype.  The next four
	bytes are the varlena header, which contains
	the total value length including itself.-->
        フィールドはvarlenaデータ型で、次の4バイトはそれ自身も含めたvarlenaヘッダーの合計長さ
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>&lt; -1</term>
      <listitem>
       <para>
	<!--Reserved for future use.-->
        後のために保存
       </para>
      </listitem>
     </varlistentry>
    </variablelist>

    <para>
<!--For non-NULL fields, the reader can check that the typlen matches the
expected typlen for the destination column.  This provides a simple
but very useful check that the data is as expected.-->

NULLではないフィールドに対して、読み込み先は目的列のtyplenが期待されたtyplenと一致することを確認することができます。これは単純ですが、データが期待していたものであるかどうかの確認に便利です。
    </para>

    <para>
<!--There is no alignment padding or any other extra data between fields.
Note also that the format does not distinguish whether a datatype is
pass-by-reference or pass-by-value.  Both of these provisions are
deliberate: they might help improve portability of the files (although
of course endianness and floating-point-format issues can still keep
you from moving a binary file across machines).-->

フィールド間ではアラインパディングや、その他の追加的データはありません。また、形式でデータ型が参照パスであるか値パスであるかの判断を行わないことにも注意してください。これら両方の規定は故意のもので、ファイルの移植性を向上させる働きがあるかもしれません（しかし、エンディアン性と浮動少数形式の問題などから、マシン間のファイルの移動はまだ問題があります）。
    </para>

    <para>
<!--If OIDs are included in the dump, the OID field immediately follows the
field-count word.  It is a normal field except that it's not included
in the field-count.  In particular it has a typlen - this will allow
handling of 4-byte vs 8-byte OIDs without too much pain, and will allow
OIDs to be shown as NULL if we someday allow OIDs to be optional.-->

OIDがダンプに含まれている場合は、OIDのフィールドはフィールドカウントの直後に位置します。これは、他のフィールドと何ら違いはありませんが、フィールドカウントにはカウントされません。typlenを持ち、これで4バイトと8バイトのOIDに対してとりたて負担をかけずに処理を行います。また、今後の実装でOIDがオプションとなった場合、OIDを
NULLとして表示させます。
    </para>
   </refsect3>

   <refsect3>
    <refsect3info>
     <date>2001-01-02</date>
    </refsect3info>
    <title>
     <!--File Trailer-->ファイル後書きフィールド
    </title>
    <para>
     <!--The file trailer consists of an int16 word containing -1.  This is
     easily distinguished from a tuple's field-count word.-->

     ファイル後書きフィールドは、-1を含んだ、int16の情報単位で構成されます。これはタプルのフィールドカウントを使用することによって容易に見分けることができます。
    </para>

    <para>
     <!--A reader should report an error if a field-count word is neither -1
     nor the expected number of columns.  This provides an extra
     check against somehow getting out of sync with the data.-->

     読み込み先は、フィールドカウントが-1である、または予期されていた列数とは異なる場合にはその報告を行ってください。これは、データと共にsyncからどうにかして抜けることに対しての追加確認を提供します。
    </para>
   </refsect3>
  </refsect2>
 </refsect1>
 
 <refsect1 id="R1-SQL-COPY-3">
  <title>
   <!--Usage-->使用方法
  </title>
  <para>
<!--The following example copies a table to standard output,
using a vertical bar (|) as the field
delimiter:-->

下記の例では、フィールドの区別子として縦棒（「|」）を使用し、テーブルを標準出力に出します。 
  </para>

<programlisting>
COPY country TO <filename>stdout</filename> USING DELIMITERS '|';
</programlisting>

  <para>
   <!--To copy data from a Unix file into a table country:-->

   下記のコマンドは、Unixファイルからデータをテーブルcountryにコピーします。

  </para>
<programlisting>
COPY country FROM '/usr1/proj/bray/sql/country_data';
</programlisting>
  <para>
   <!--Here is a sample of data suitable for copying into a table
   from <filename>stdin</filename> (so it
   has the termination sequence on the last line):-->

   下記の例は<filename>stdin</filename>からテーブルにコピーするときの有効なデータを示しています（したがって、最終行に終端を表す並びがあります）。
  </para>
<programlisting>
AF      AFGHANISTAN
AL      ALBANIA
DZ      ALGERIA
ZM      ZAMBIA
ZW      ZIMBABWE
&bsol;.
</programlisting>
  <para>
   <!--Note that the white space on each line is actually a TAB.-->
   各行の空白は実際にはタブであることに注意してください。
  </para>
  <para>
   <!--The following is the same data, output in binary format on a Linux/i586
   machine. The data is shown after filtering through
   the Unix utility <command>od -c</command>. The table has
   three fields; the first is <type>char(2)</type>,
   the second is <type>text</type>, and the third is
   <type>integer</type>. All the
   rows have a null value in the third field.-->

   Linux/i586マシンでのバイナリ形式による同じデータの出力です。Unixのユーティリティ<command>od -c</command>コマンドでフィルタを行った後にデータが表示されます。テーブルには3つのフィールドがあります。1つ目のフィールドは<type>char(2)</type>型、2つ目のフィールドは<type>text</type>型、3つ目のフィールドは<type>integer</type>です。すべての行は3つ目のフィールドにNULL値を持っています。
 
  </para>
<programlisting>
0000000   P   G   B   C   O   P   Y  &bsol;n 377  &bsol;r  &bsol;n  &bsol;0 004 003 002 001
0000020  &bsol;0  &bsol;0  &bsol;0  &bsol;0  &bsol;0  &bsol;0  &bsol;0  &bsol;0 003  &bsol;0 377 377 006  &bsol;0  &bsol;0  &bsol;0
0000040   A   F 377 377 017  &bsol;0  &bsol;0  &bsol;0   A   F   G   H   A   N   I   S
0000060   T   A   N  &bsol;0  &bsol;0 003  &bsol;0 377 377 006  &bsol;0  &bsol;0  &bsol;0   A   L 377
0000100 377  &bsol;v  &bsol;0  &bsol;0  &bsol;0   A   L   B   A   N   I   A  &bsol;0  &bsol;0 003  &bsol;0
0000120 377 377 006  &bsol;0  &bsol;0  &bsol;0   D   Z 377 377  &bsol;v  &bsol;0  &bsol;0  &bsol;0   A   L
0000140   G   E   R   I   A  &bsol;0  &bsol;0 003  &bsol;0 377 377 006  &bsol;0  &bsol;0  &bsol;0   Z
0000160   M 377 377  &bsol;n  &bsol;0  &bsol;0  &bsol;0   Z   A   M   B   I   A  &bsol;0  &bsol;0 003
0000200  &bsol;0 377 377 006  &bsol;0  &bsol;0  &bsol;0   Z   W 377 377  &bsol;f  &bsol;0  &bsol;0  &bsol;0   Z
0000220   I   M   B   A   B   W   E  &bsol;0  &bsol;0 377 377
</programlisting>
 </refsect1>
 
 <refsect1 id="R1-SQL-COPY-6">
  <title>
   <!--Compatibility-->
   互換性
  </title>
  
  <refsect2 id="R2-SQL-COPY-4">
   <refsect2info>
    <date>1998-09-08</date>
   </refsect2info>
   <title>
    SQL92
   </title>
   <para>
    <!--There is no <command>COPY</command> statement in SQL92.-->
    SQL92には<command>COPY</command>文はありません。
   </para>
  </refsect2>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
