無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

COPY

名前

COPY -- ファイルとテーブルの間でデータをコピーする

概要

COPY 

table_name

 [ ( 

column_name

 [, ...] ) ]
    FROM { '

filename

' | PROGRAM '

command

' | STDIN }
    [ [ WITH ] ( 

option

 [, ...] ) ]

COPY { 

table_name

 [ ( 

column_name

 [, ...] ) ] | ( 

query

 ) }
    TO { '

filename

' | PROGRAM '

command

' | STDOUT }
    [ [ WITH ] ( 

option

 [, ...] ) ]



ここで

option

は以下のいずれかです。



    FORMAT 

format_name


    OIDS [ 

boolean

 ]
    FREEZE [ 

boolean

 ]
    DELIMITER '

delimiter_character

'
    NULL '

null_string

'
    HEADER [ 

boolean

 ]
    QUOTE '

quote_character

'
    ESCAPE '

escape_character

'
    FORCE_QUOTE { ( 

column_name

 [, ...] ) | * }
    FORCE_NOT_NULL ( 

column_name

 [, ...] )
    ENCODING '

encoding_name

'

説明

COPY コマンドは、 PostgreSQL のテーブルと標準のファイルシステムのファイル間でデータを移動します。 COPY TO コマンドはテーブルの内容をファイル コピーします。 また、 COPY FROM コマンドは、ファイル から テーブルへとデータをコピーします(この時、既にテーブルにあるデータにコピーした内容を追加します)。 また、 COPY TO により SELECT 問い合わせの結果をコピーすることができます。

列リストが指定されている場合、 COPY は、指定された列のデータのみのコピーをファイルからまたはファイルへ行います。 列リストに含まれていない列がテーブル内にある場合、 COPY FROM はそれらの列にデフォルトの値を挿入します。

ファイル名付きの COPY コマンドは、 PostgreSQL サーバに対して直接ファイルへの読み書きをするように命じます。 指定したファイルは必ずサーバからアクセスできる必要があります。また、ファイル名はサーバから見たように指定されなければなりません。 PROGRAM が指定された場合、 サーバは指定したコマンドを実行しその標準入力を読み取る、または、サーバの標準出力を書き出します。 コマンドはサーバからの視点で指定しなければならず、また、 postgres ユーザによって実行できなければなりません。 STDIN STDOUT が指定された場合、データはクライアントとサーバ間を流れます。

パラメータ

table_name

既存のテーブルの名前です(スキーマ修飾名も可)。

column_name

コピー対象の列リストです。このパラメータは省略可能です。 列リストが指定されていない場合は、テーブルの全ての列がコピーされます。

query

指定した SELECT コマンドまたは VALUES コマンドの結果がコピーされます。 問い合わせを括弧でくくる必要があることに注意してください。

filename

入出力ファイルのパス名です。 入力ファイル名は絶対パスでも相対パスでも記述することができますが、出力ファイル名は絶対パスでなければなりません。 Windowsユーザの場合、パス名内にバックスラッシュを使用する際には E'' 文字列を使用し、二重にする必要があるかもしれません。

PROGRAM

実行するコマンドです。 COPY FROM では、入力はコマンドの標準出力から読み取られ、 COPY TO では、出力はコマンドの標準入力に書き出されます。

コマンドはシェルから呼び出されることに注意してください。 このためシェルコマンドに信頼できない入力元からの任意の引数を渡す必要がある場合、シェルにとって特殊な意味を持つかもしれない特殊文字の除去やエスケープを注意深く実施してください、 セキュリティ上の理由のため、固定のコマンド文字列を使用することが最善です。または少なくともユーザからの入力が渡されることを防止してください。

STDIN

入力がクライアントアプリケーションからのものであることを指定します。

STDOUT

出力がクライアントアプリケーションへのものであることを指定します。

boolean

選択オプションを有効とするか無効とするかを指定します。 オプションを有効にするには、 TRUE ON または 1 と、無効にするには FALSE OFF または 0 と記述します。 また boolean 値は省略可能であり、省略時は TRUE とみなされます。

FORMAT

読み取りまたは書き込みに使用するデータ書式を選択します。 text csv (カンマ区切り値)、または binary です。 デフォルトは text です。

OIDS

各行のOIDをコピーするよう指定します (OIDを持たないテーブルに OIDS を指定する場合、または、 query コピーの場合、エラーが発生します)。

FREEZE

VACUUM FREEZE コマンドを実行した直後の、凍結状態の行を用いたデータコピー処理を要求します。 これは、初期データロード処理用の高性能なオプションとしての利用を意図しています。 ロード元のテーブルが現在の副トランザクションで作成または切り詰めされた場合、開いているカーソルは存在せず、またこのトランザクションで保持される古めのスナップショットは存在しません。 行は凍結します。

データのロードに成功すると、他のすべてのセッションから即座にデータが参照可能になることに注意してください。 これはMVCC可視性に関する一般的な規則に違反しますので、指定するユーザはこれが引き起こすかもしれない潜在的な問題に注意しなければなりません。

DELIMITER

ファイルの各行(ライン)内の列を区切る文字を指定します。 テキスト書式でのデフォルトはタブ文字、 CSV 書式ではカンマです。 これは単一の1バイト文字でなければなりません。 このオプションは binary 書式を使用する場合は許されません。

NULL

NULL値を表す文字列を指定します。 デフォルトは、テキスト書式では \N (バックスラッシュN)、 CSV 書式では引用符のない空文字です。 NULL値と空文字列を区別する必要がない場合は、テキスト書式であっても空文字列を使用した方が良いかもしれません。 このオプションは binary 書式を使用する場合は許されません。

注意: COPY FROM の場合、この文字列と一致するデータ要素はNULL値として格納されます。 COPY TO 実行時に使用した同じ文字列を使用しているかどうか確認してください。

HEADER

ヘッダ行を含むファイルを指定します。 このファイルには各列の名前が記載されています。 出力では、先頭行にテーブルの列名が入り、入力では先頭行は無視されます。 このオプションは CSV 書式を使用する場合のみで許されます。

QUOTE

データ値を引用符付けする際に使用される引用符用文字を指定します。 デフォルトは二重引用符です。 これは単一の1バイト文字でなければなりません。 このオプションは CSV 書式を使用する場合のみで許されます。

ESCAPE

QUOTE の値がデータ内の文字と一致した場合に、その前に現れなければならない文字を指定します。 デフォルトは QUOTE の値です(このためデータ内に引用符用文字があれば二重になります)。 これは単一の1バイト文字でなければなりません。 このオプションは CSV 書式を使用する場合のみ許されます。

FORCE_QUOTE

指定された各列内にある全ての非 NULL 値を強制的に引用符で囲みます。 NULL 出力は引用符で囲まれません。 * が指定された場合、非 NULL 値はすべての列で引用符付けされます。 このオプションは COPY TO において、かつ、 CSV 書式を使用する場合のみで許されます。

FORCE_NOT_NULL

指定された列の値をNULL文字列に対して比較しません。 NULL文字列が空であるデフォルトでは、空の値は引用符付けされていなくてもNULLではなく長さが0の文字列として読み取られることを意味します。 このオプションは COPY FROM において、かつ、 CSV 書式を使用する場合のみで許されます。

ENCODING

ファイルが encoding_name で符号化されていることを指定します。 このオプションが省略された場合、現在のクライアント符号化方式が使用されます。 後述の注意を参照してください。

出力

正常に完了した場合、 COPY コマンドは以下の形式のコマンドタグを返します。

COPY 

count

count はコピーされた行数です。

注釈

COPY は通常のテーブルに対してのみ使用することができます。 ビューに対して使用することはできません。 しかし、 COPY (SELECT * FROM viewname ) TO ... と記述することができます。

COPY は指定された特定のテーブルのみを扱います。 つまり子テーブルへまたは子テーブルからのデータのコピーは行いません。 したがって例えば、 COPY table TO SELECT * FROM ONLY table と同じデータを示します。 しかし COPY (SELECT * FROM table ) TO ... を使用して、継承階層内のすべてのデータをダンプすることができます。

COPY TO の場合は値を読み込むテーブルに対するSELECT権限が、 COPY FROM の場合は値を挿入するテーブルに対するINSERT権限が必要です。 コマンド内で列挙された列に対する列権限を持つことで十分です。

COPY コマンドで指定するファイルは、クライアントアプリケーションではなく、サーバが直接読み込み/書き込みを行います。 したがって、それらのファイルは、クライアントではなく、データベースサーバマシン上に存在するか、または、データベースサーバマシンからアクセス可能である必要があります。 さらに、クライアントではなく、 PostgreSQL ユーザ(サーバを実行しているユーザID)が、アクセス権限と読み書き権限を持っている必要があります。 同様に、 PROGRAM で指定されたコマンドは、クライアントアプリケーションではなくサーバにより直接実行されます。 また PostgreSQL ユーザによって実行されなければなりません。 ファイル名を指定した COPY コマンドの実行は、データベースのスーパーユーザのみに許可されています。このコマンドによって、サーバがアクセス権限を持つ全てのファイルの読み込み、書き込みが可能になってしまうためです。

COPY psql \copy とは異なるものであることに注意してください。 \copy COPY FROM STDIN COPY TO STDOUT を呼び出し、 psql クライアントからアクセスできるファイルにデータの書き込み/読み込みを行います。 したがって、 \copy コマンドでは、ファイルへのアクセスが可能かどうかと、ファイルに対するアクセス権限の有無は、サーバではなくクライアント側に依存します。

COPY でファイル名を指定する時は、常に絶対パスで記述することをお勧めします。 COPY TO コマンドの場合はサーバによって強制的に絶対パス指定にさせられますが、 COPY FROM コマンドでは相対パスで指定されたファイルを読み込むことも可能となっています。 後者では、クライアントの作業ディレクトリではなく、サーバプロセスの作業ディレクトリ(通常はクラスタのデータディレクトリ)からの相対的なディレクトリとして解釈されます。

PROGRAM を用いたコマンド実行は、SELinuxなどのオペレーティングシステムのアクセス制御機構によって制限されるかもしれません。

COPY FROM は、宛先テーブル上で任意のトリガと検査制約を呼び出しますが、ルールは呼び出しません。

COPY の入出力は DateStyle の影響を受けます。 デフォルト以外の DateStyle が設定された可能性がある PostgreSQL インストレーションとの移植を確実に行いたい場合は、 COPY を使う前に DateStyle ISO に設定しなければなりません。 また、 IntervalStyle sql_standard としてデータをダンプすることは避けることを勧めます。 負の時間間隔値が別の IntervalStyle 設定を持つサーバで誤解釈される可能性があるためです。

たとえデータがクライアント経由ではなくサーバにより直接ファイルから読み書きされるとしても、入力データは ENCODING オプションまたは現在のクライアント符号化方式にしたがって解釈され、出力データは ENCODING オプションまたは現在のクライアント符号化方式で符号化されます。

COPY では、エラーが発生するとすぐに処理を停止します。 COPY TO コマンドの実行では何ら問題ありませんが、 COPY FROM の場合は、対象となるテーブルは初めの方の行を既に受け取っています。 これらの行は不可視となり、アクセスすることもできませんが、ディスク領域を占有します。 したがって、大きなコピー処理に何度も失敗した場合には、無視できないほど無駄なディスク領域が増えてしまいます。 この無駄な領域を取り戻すには、 VACUUM を行う必要があります。

ファイルの形式

テキスト形式

text 書式を使用する場合、読み書きされるデータはテーブルの1つの行を1行で表したテキストファイルとなります。 行内の列は区切り文字で区切られます。 属性値自体は、その属性のデータ型の出力関数で生成された、または、その入力関数で受け付け可能な文字列です。 値がNULLの列では、代わりに指定されたNULL値を表す文字列が使用されます。 入力ファイルのいずれかの行にある列数が予期された数と違う場合、 COPY FROM はエラーを発生します。 OIDS が指定された場合、OIDは、ユーザデータの列の前にある、1番目の列として読み書きされます。

データの終了は、バックスラッシュとピリオド( \. )のみから構成される1行で表されます。 EOF(ファイルの終了)を使えば同じことが実現できるので、ファイルからの読み込みの場合はデータ終了マークは不要です。 しかし、3.0以前のクライアントプロトコルを使用したクライアントアプリケーションとデータのコピーを行う場合だけは、読み込み、書き込みを問わず、終了マークが必要です。

バックスラッシュ文字( \ )は、 COPY 対象データ内で、行や列の区切り文字と判定される可能性があるデータ文字列の引用符付けに使用します。 特に、バックスラッシュ自体、改行、使用中の区切り文字などの文字が列の値に含まれている場合は、 必ず 前にバックスラッシュを付けなければなりません。

指定されたNULL文字列はバックスラッシュを付けずに COPY TO に送られます。 一方、 COPY FROM では、バックスラッシュを削除する前にNULL文字列と入力が比較されます。 したがって、 \N といったNULL文字列が実際の \N というデータ値と混乱することはあり得ません。 (これは \\N として表現されます。)

COPY FROM は、バックスラッシュで始まる次のような文字の並びを識別します。

文字の並び 表現
\b バックスペース(ASCII 8)
\f 改ページ(ASCII 12)
\n 改行(ASCII 10)
\r 復帰(ASCII 13)
\t タブ(ASCII 9)
\v 垂直タブ(ASCII 11)
\ 数字 バックスラッシュに続き1から3個の8進数の数字をコード番号として指定すると、そのコードが表す文字を指定できます。
\x digits バックスラッシュ、 x という並びに続き1から2個の16進数の数字をコード番号として指定すると、そのコードが表す文字を指定できます。

現在、 COPY TO は、バックスラッシュの後ろに8進数や16進数を付けた形式で文字を出力することはありませんが、上記一覧に存在しない制御文字が含まれている場合は、この形式を使用します。

上表で記載されていないバックスラッシュ付きの文字はすべて、そのまま解釈されます。 しかし、不要なバックスラッシュの追加には注意してください。 偶然にデータを終わりを示す印( \. )やヌル文字列(デフォルトでは \N )と合致する文字列を生成してしまうかもしれないためです。 これらの文字列は他のバックスラッシュの処理を行う前に解釈されます。

COPY データを生成するアプリケーションは、データ内の改行と復帰をそれぞれ、 \n \r に変換することを強く推奨されています。 現在のところ、バックスラッシュと復帰文字でデータ内の復帰を表したり、バックスラッシュと改行文字でデータ内の改行を表すことが可能です。 しかし、こういった表現は今後のリリースでは、受け付けられなくなる可能性があります。 また、 COPY ファイルが異なるマシンをまたがって転送される場合、破損するおそれがかなりあります (例えば、UnixからWindowsあるいはその逆)。

COPY TO は各行の行末にUnix形式の改行( " \n " )を出力します。 なお、Microsoft Windowsで稼働するサーバの場合は、サーバ上のファイルへの COPY の場合にのみ復帰/改行( " \r\n " )を出力します。 プラットフォームをまたがる一貫性のために、サーバのプラットフォームにかかわらず、 COPY TO STDOUT は常に " \n " を送信します。 COPY FROM は、改行、復帰、復帰/改行を行末として扱うことができます。 データを意図したバックスラッシュのない改行や復帰によるエラーの危険性を減らすために、 COPY FROM は、入力行の行末が全て共通でない場合に警告を発します。

CSV形式

この書式オプションは、スプレッドシートなど他の多くのプログラムで使用されるカンマ区切り値( CSV )ファイル形式をインポート、エキスポートするために使用されます。 PostgreSQL の標準テキスト書式で使用されるエスケープ規則の代わりに、一般的なCSVのエスケープ機構を生成、認識します。

各レコードの値は DELIMITER 文字で区切られます。 区切り文字、 QUOTE 文字、 NULL 文字列、復帰、改行文字を含む値の場合、全体の値の前後に QUOTE 文字が付与されます。値の中で QUOTE 文字や ESCAPE 文字が現れる場合、その前にエスケープ用の文字が付与されます。 また、 FORCE_QUOTE を使用して、特定列内の非 NULL 値を出力する時に強制的に引用符を付与することもできます。

CSV 書式には NULL 値と空文字列とを区別する標準的な方法はありません。 PostgreSQL のCOPYでは引用符によってこれを区別しています。 NULL NULL パラメータの文字列として出力され、引用符で囲まれません。 一方、 NULL パラメータの文字列に一致する非 NULL 値は引用符で囲まれます。 たとえばデフォルトの設定では、 NULL は引用符付けのない空文字列として出力され、空文字列のデータ値は2つの引用符( "" )で出力されます。 データの読み込みの際も同様の規則に従います。 FORCE_NOT_NULL を使用して、特定列に対し NULL 入力の比較を行わないようにすることもできます。

CSV 書式ではバックスラッシュは特別な文字ではありませんので、データ終端記号 \. はデータ値として現れることがあります。 誤った解釈を防ぐために、行内の一項目として \. というデータ値が現れる場合、出力に自動的に引用符が付けられます。 また、入力では引用符で括られた場合データ終端記号として解釈されません。 単一の引用符で括られない列で \. という値を持つ可能性がある、他のアプリケーションで作成されたファイルをロードしようとする場合、入力ファイル内のこうした値を引用符で括る必要があります。

注意: CSV 書式では文字はすべて意味を持ちます。 空白文字で括られた単一引用符や DELIMITER 以外の任意の文字がこうした文字に含まれます。 これにより、固定長にするために CSV の行に空白文字を埋めるシステムから取り出したデータをインポートする時にエラーが発生する可能性があります。 このような状況になった場合、 PostgreSQL にデータをインポートする前に、その CSV ファイルから行末の空白を除去する前処理が必要になります。

注意: CSV書式は、復帰文字や改行文字が埋め込まれ引用符で囲まれた値を含むCSVファイルを認識し、生成します。 したがって、このファイルでは、テキスト書式のように1つのテーブル行が1行で表されているとは限りません。

注意: 奇妙な(時には間違った)CSVファイルを生成するプログラムは多く存在するので、このファイル書式には標準よりも多くの慣習があります。 したがって、この機能でインポートできないファイルが存在するかもしれませんし、 COPY が他のプログラムで処理できないファイルを生成するかもしれません。

バイナリ形式

binary 書式オプションにより、すべてのデータはテキストではなくバイナリ書式で書き込み/読み取りされるようになります。 テキストや CSV 書式よりも多少高速になりますが、バイナリ書式のファイルはマシンアーキテクチャや PostgreSQL のバージョンをまたがる移植性が落ちます。 またバイナリ書式はデータ型に非常に依存します。 たとえば、テキスト書式ではうまく動作したとしても、 smallint 列からバイナリデータを出力し、それを integer 列として読み込むことはできません。

binary ファイルの書式は、ファイルヘッダ、行データを含む0以上のタプル、ファイルトレーラから構成されます。 ヘッダとデータはネットワークバイトオーダです。

注意: 7.4以前のリリースの PostgreSQL では異なるバイナリファイル形式を使用していました。

ファイルヘッダ

ファイルヘッダは15バイトの固定フィールドとその後に続く可変長ヘッダ拡張領域から構成されます。 固定フィールドは以下の通りです。

署名

PGCOPY\n\377\r\n\0 という11バイトの並びです。 この署名の必須部分にNULLバイトが含まれていることに注意してください (この署名は、8ビットを通過させない転送方式によってファイルが破損した場合、これを容易に識別できるように設計されています。 署名は、改行コード変換やNULLバイトの削除、上位ビット落ち、パリティの変更などによって変化します)。

フラグフィールド

このファイル形式の重要な部分となる32ビット整数のビットマスクです。 ビットには0( LSB ) から31( MSB )までの番号が付いています。 このフィールドは、このファイル形式で使用される他の全ての整数フィールドと同様、(最大バイトが最初に現れる)ネットワークバイトオーダで保存されていることに注意してください。 ファイル形式上の致命的な問題を表すために、16-31ビットは予約されています。 この範囲に想定外のビットが設定されていることが判明した場合、読み込み先は処理を中断しなければなりません。 後方互換における形式の問題を通知するために、0-15ビットは予約されています。 この範囲に想定外のビットが設定されていても、読み込み先は無視すべきです。 現在、1つのビットだけがフラグビットとして定義されており、残りは0でなければなりません。

ビット16

1ならば、OIDがデータに含まれています。 0ならば、含まれていません。

ヘッダ拡張領域長

自分自身を除いた、ヘッダの残り部分のバイト長を示す32ビットの整数です。 現在、これは0となっており、すぐ後に最初のタプルが続きます。 今後、ヘッダ内に追加データを格納するような形式の変更があるかもしれません。 読み込み側では、ヘッダ拡張データの扱いがわからない場合、そのデータをスキップしなければなりません。

ヘッダ拡張領域は、それ自身で認識することができる塊の並びを保持するために用意されています。 フラグフィールドは読み込み先に拡張領域の内容を知らせるものではありません。 ヘッダ拡張内容の個々の設計は今後のリリースのために残してあります。

この設計によって、後方互換性を維持するヘッダの追加(ヘッダ拡張チャンクの追加や下位フラグビットの設定)と後方互換性のない変更(変更を通知するための高位フラグビットの設定や必要に応じた拡張領域へのサポート情報追加)の両方に対応できます。

タプル

全てのタプルはタプル内のフィールド数を表す16ビットの整数から始まります(現時点では、テーブル内の全てのタプルは同一のフィールド数を持つことになっていますが、今後、これは変更される可能性があります)。 その後に、タプル中のそれぞれのフィールドが続きます。これらのフィールドには、先頭にフィールドデータが何バイトあるかを表す32ビット長のワードが付けられています (このワードが表す長さには自分自身は含まれません。したがって、0になることもあります)。 特殊な値としてNULLフィールドを表す-1が用意されています。 このNULLが指定された場合、値用のバイトはありません。

フィールド間には整列用のパッドやその他の余計なデータはありません。

現在、バイナリ書式のファイル内の全てのデータ値は、バイナリ形式(形式コード1)であると仮定されています。 将来の拡張によって、列単位に形式コードを指定するヘッダフィールドが追加されることを予想したものです。

実際のタプルデータとして適切なバイナリ形式を決定するためには、 PostgreSQL のソース、特に各列のデータ型用の *send 関数と *recv 関数(通常配布物内の src/backend/utils/adt ディレクトリにあります)を調べなければなりません。

このファイルにOIDが含まれる場合、OIDフィールドがフィールド数ワードの直後に続きます。 これは、フィールドカウントを持たない点を除いて、通常のフィールドです。 特に長さワードがあるため、苦労することなく、4バイトのOIDも8バイトのOIDも扱うことができます。 また、これにより、望ましいと判断されれば、OIDをNULLとして表示することができます。

ファイルトレーラ

ファイルトレーラは、-1を含んだ、16ビットの整数ワードで構成されます。 タプルのフィールドカウントワードを使用すれば、このワードを容易に見分けることができます。

読み込み側は、フィールドカウントワードが-1でも、想定した列数でもなかった場合はエラーを報告しなければなりません。 これにより、何らかの理由でデータとの同期が取れなくなったことを判定する特別な検査を行うことが可能になります。

次の例では、フィールド区切り文字として縦棒( | )を使用してテーブルをクライアントにコピーします。

COPY country TO STDOUT (DELIMITER '|');

ファイルから country テーブルにデータをコピーします。

COPY country FROM '/usr1/proj/bray/sql/country_data';

名前が'A'から始まる国のみをファイルにコピーします。

COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/usr1/proj/bray/sql/a_list_countries.copy';

圧縮したファイルにコピーするためには、以下のように外部の圧縮プログラムに出力をパイプで渡すことができます。

COPY country TO PROGRAM 'gzip > /usr1/proj/bray/sql/country_data.gz';

これは STDIN からテーブルにコピーするのに適したデータの例です。

AF      AFGHANISTAN
AL      ALBANIA
DZ      ALGERIA
ZM      ZAMBIA
ZW      ZIMBABWE

各行の空白文字は実際にはタブ文字であることに注意してください。

以下は同一のデータをバイナリ書式で出力したものです。 データをUnixユーティリティ od -c を使ってフィルタしたものを示します。 テーブルには3列あり、最初のデータ型は char(2) 、2番目は text 、3番目は integer です。 全ての行の3列目はNULL値です。

0000000   P   G   C   O   P   Y  \n 377  \r  \n  \0  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0 003  \0  \0  \0 002   A   F  \0  \0  \0 013   A
0000040   F   G   H   A   N   I   S   T   A   N 377 377 377 377  \0 003
0000060  \0  \0  \0 002   A   L  \0  \0  \0 007   A   L   B   A   N   I
0000100   A 377 377 377 377  \0 003  \0  \0  \0 002   D   Z  \0  \0  \0
0000120 007   A   L   G   E   R   I   A 377 377 377 377  \0 003  \0  \0
0000140  \0 002   Z   M  \0  \0  \0 006   Z   A   M   B   I   A 377 377
0000160 377 377  \0 003  \0  \0  \0 002   Z   W  \0  \0  \0  \b   Z   I
0000200   M   B   A   B   W   E 377 377 377 377 377 377

互換性

標準SQLには COPY 文はありません。

以下の構文は、 PostgreSQL バージョン9.0より前に使用されていたもので、まだサポートされています。

COPY 

table_name

 [ ( 

column_name

 [, ...] ) ]
    FROM { '

filename

' | STDIN }
    [ [ WITH ]
          [ BINARY ]
          [ OIDS ]
          [ DELIMITER [ AS ] '

delimiter

' ]
          [ NULL [ AS ] '

null string

' ]
          [ CSV [ HEADER ]
                [ QUOTE [ AS ] '

quote

' ]
                [ ESCAPE [ AS ] '

escape

' ]
                [ FORCE NOT NULL 

column_name

 [, ...] ] ] ]

COPY { 

table_name

 [ ( 

column_name

 [, ...] ) ] | ( 

query

 ) }
    TO { '

filename

' | STDOUT }
    [ [ WITH ]
          [ BINARY ]
          [ OIDS ]
          [ DELIMITER [ AS ] '

delimiter

' ]
          [ NULL [ AS ] '

null string

' ]
          [ CSV [ HEADER ]
                [ QUOTE [ AS ] '

quote

' ]
                [ ESCAPE [ AS ] '

escape

' ]
                [ FORCE QUOTE { 

column_name

 [, ...] | * } ] ] ]

この構文では、 BINARY CSV FORMAT オプションの引数ではなく、独立したキーワードとして扱われることに注意してください。

以下の構文は、 PostgreSQL バージョン7.3より前に使用されていたもので、まだサポートされています。

COPY [ BINARY ] 

table_name

 [ WITH OIDS ]
    FROM { '

filename

' | STDIN }
    [ [USING] DELIMITERS '

delimiter

' ]
    [ WITH NULL AS '

null string

' ]

COPY [ BINARY ] 

table_name

 [ WITH OIDS ]
    TO { '

filename

' | STDOUT }
    [ [USING] DELIMITERS '

delimiter

' ]
    [ WITH NULL AS '

null string

' ]


powered by SEO.CUG.NET