]ここでoptionは以下のいずれかです。'encoding_name'説明COPYコマンドは、PostgreSQLのテーブルと標準のファイルシステムのファイル間でデータを移動します。TOコマンドはテーブルの内容をファイルにコピーします。FROMコマンドは、ファイルからテーブルへとデータをコピーします(この時、既にテーブルにあるデータにコピーした内容を追加します)。TOによりSELECT問い合わせの結果をコピーすることができます。列リストが指定されている場合、COPYは、指定された列のデータのみのコピーをファイルからまたはファイルへ行います。FROMはそれらの列にデフォルトの値を挿入します。ファイル名付きのCOPYコマンドは、PostgreSQLサーバに対して直接ファイルへの読み書きをするように命じます。指定したファイルは必ずサーバからアクセスできる必要があります。ファイル名はサーバから見たように指定されなければなりません。STDINやSTDOUTが指定された場合、データはクライアントとサーバ間を流れます。パラメータtable_name既存のテーブルの名前です(スキーマ修飾名も可)。columnコピー対象の列リストです。このパラメータは省略可能です。列リストが指定されていない場合は、テーブルの全ての列がコピーされます。query指定したSELECTコマンドまたはVALUESコマンドの結果がコピーされます。問い合わせを括弧でくくる必要があることに注意してください。filename入出力ファイルの絶対パス名です。Windowsユーザの場合、パス名内にバックスラッシュを使用する際にはE''文字列を使用し、二重にする必要があるかもしれません。STDIN入力がクライアントアプリケーションからのものであることを指定します。STDOUT出力がクライアントアプリケーションへのものであることを指定します。boolean選択オプションを有効とするか無効とするかを指定します。オプションを有効にするには、TRUE、ONまたは1と、無効にするにはFALSE、OFFまたは0と記述します。boolean値は省略可能であり、省略時はTRUEとみなされます。FORMAT読み取りまたは書き込みに使用するデータ書式を選択します。text、csv(カンマ区切り値)、またはbinaryです。デフォルトはtextです。(OIDを持たないテーブルにOIDSを指定する場合、または、queryコピーの場合、エラーが発生します)。DELIMITERファイルの各行(ライン)内の列を区切る文字を指定します。テキスト書式でのデフォルトはタブ文字、CSV書式ではカンマです。これは単一の1バイト文字でなければなりません。このオプションはbinary書式を使用する場合は許されません。NULLNULL値を表す文字列を指定します。デフォルトは、テキスト書式では\N(バックスラッシュN)、CSV書式では引用符のない空文字です。NULL値と空文字列を区別する必要がない場合は、テキスト書式であっても空文字列を使用した方が良いかもしれません。このオプションはbinary書式を使用する場合は許されません。FROMの場合、この文字列と一致するデータ要素はNULL値として格納されます。TO実行時に使用した同じ文字列を使用しているかどうか確認してください。HEADERヘッダ行を含むファイルを指定します。このファイルには各列の名前が記載されています。出力では、先頭行にテーブルの列名が入り、入力では先頭行は無視されます。このオプションはCSV書式を使用する場合のみで許されます。QUOTEデータ値を引用符付けする際に使用される引用符用文字を指定します。デフォルトは二重引用符です。これは単一の1バイト文字でなければなりません。このオプションはCSV書式を使用する場合のみで許されます。ESCAPEQUOTEの値がデータ内の文字と一致した場合に、その前に現れなければならない文字を指定します。デフォルトはQUOTEの値です(このためデータ内に引用符用文字があれば二重になります)。これは単一の1バイト文字でなければなりません。このオプションはCSV書式を使用する場合のみ許されます。FORCE_QUOTE指定された各列内にある全ての非NULL値を強制的に引用符で囲みます。NULL出力は引用符で囲まれません。*が指定された場合、非NULL値はすべての列で引用符付けされます。TOにおいて、かつ、CSV書式を使用する場合のみで許されます。FORCE_NOT_NULL指定された列の値をNULL文字列に対して比較しません。NULL文字列が空であるデフォルトでは、空の値は引用符付けされていなくてもNULLではなく長さが0の文字列として読み取られることを意味します。FROMにおいて、かつ、CSV書式を使用する場合のみで許されます。ENCODINGファイルがencoding_nameで符号化されていることを指定します。このオプションが省略された場合、現在のクライアント符号化方式が使用されます。後述の注意を参照してください。正常に完了した場合、COPYコマンドは以下の形式のコマンドタグを返します。countcountはコピーされた行数です。注釈COPYは通常のテーブルに対してのみ使用することができます。ビューに対して使用することはできません。...と記述することができます。COPYは指定された特定のテーブルのみを扱います。子テーブルへまたは子テーブルからのデータのコピーは行いません。tableと同じデータを示します。...を使用して、継承階層内のすべてのデータをダンプすることができます。FROMの場合は値を挿入するテーブルに対するINSERT権限が必要です。コマンド内で列挙された列に対する列権限を持つことで十分です。COPYコマンドで指定するファイルは、クライアントアプリケーションではなく、サーバが直接読み込み/書き込みを行います。したがって、それらのファイルは、クライアントではなく、データベースサーバマシン上に存在するか、または、データベースサーバマシンからアクセス可能である必要があります。クライアントではなく、PostgreSQLユーザ(サーバを実行しているユーザID)が、アクセス権限と読み書き権限を持っている必要があります。ファイル名を指定したCOPYコマンドの実行は、データベースのスーパーユーザのみに許可されています。このコマンドによって、サーバがアクセス権限を持つ全てのファイルの読み込み、書き込みが可能になってしまうためです。COPYはpsqlの\copyとは異なるものであることに注意してください。STDOUTを呼び出し、psqlクライアントからアクセスできるファイルにデータの書き込み/読み込みを行います。したがって、\copyコマンドでは、ファイルへのアクセスが可能かどうかと、ファイルに対するアクセス権限の有無は、サーバではなくクライアント側に依存します。COPYでファイル名を指定する時は、常に絶対パスで記述することをお勧めします。FROMコマンドでは相対パスで指定されたファイルを読み込むことも可能となっています。後者では、クライアントの作業ディレクトリではなく、サーバプロセスの作業ディレクトリ(通常はクラスタのデータディレクトリ)からの相対的なディレクトリとして解釈されます。FROMは、宛先テーブル上で任意のトリガと検査制約を呼び出しますが、ルールは呼び出しません。COPYの入出力はDateStyleの影響を受けます。デフォルト以外のDateStyleが設定された可能性があるPostgreSQLインストレーションとの移植を確実に行いたい場合は、COPYを使う前にDateStyleをISOに設定しなければなりません。IntervalStyleをsql_standardとしてデータをダンプすることは避けることを勧めます。負の時間間隔値が別のIntervalStyle設定を持つサーバで誤解釈される可能性があるためです。データがクライアント経由ではなくサーバにより直接ファイルから読み書きされるとしても、入力データはENCODINGオプションまたは現在のクライアント符号化方式にしたがって解釈され、出力データはENCODINGオプションまたは現在のクライアント符号化方式で符号化されます。COPYでは、エラーが発生するとすぐに処理を停止します。FROMの場合は、対象となるテーブルは初めの方の行を既に受け取っています。これらの行は不可視となり、アクセスすることもできませんが、ディスク領域を占有します。したがって、大きなコピー処理に何度も失敗した場合には、無視できないほど無駄なディスク領域が増えてしまいます。この無駄な領域を取り戻すには、VACUUMを行う必要があります。ファイルの形式テキスト形式text書式を使用する場合、読み書きされるデータはテーブルの1つの行を1行で表したテキストファイルとなります。行内の列は区切り文字で区切られます。属性値自体は、その属性のデータ型の出力関数で生成された、または、その入力関数で受け付け可能な文字列です。値がNULLの列では、代わりに指定されたNULL値を表す文字列が使用されます。FROMはエラーを発生します。OIDSが指定された場合、OIDは、ユーザデータの列の前にある、1番目の列として読み書きされます。データの終了は、バックスラッシュとピリオド(\.)のみから構成される1行で表されます。EOF(ファイルの終了)を使えば同じことが実現できるので、ファイルからの読み込みの場合はデータ終了マークは不要です。3.0以前のクライアントプロトコルを使用したクライアントアプリケーションとデータのコピーを行う場合だけは、読み込み、書き込みを問わず、終了マークが必要です。バックスラッシュ文字(\)は、COPY対象データ内で、行や列の区切り文字と判定される可能性があるデータ文字列の引用符付けに使用します。区切り文字などの文字が列の値に含まれている場合は、必ず前にバックスラッシュを付けなければなりません。FROMでは、バックスラッシュを削除する前にNULL文字列と入力が比較されます。したがって、\NといったNULL文字列が実際の\Nというデータ値と混乱することはあり得ません。(これは\\Nとして表現されます。FROMは、バックスラッシュで始まる次のような文字の並びを識別します。バックスラッシュに続き1から3個の8進数の数字をコード番号として指定すると、そのコードが表す文字を指定できます。いう並びに続き1から2個の16進数の数字をコード番号として指定すると、そのコードが表す文字を指定できます。TOは、バックスラッシュの後ろに8進数や16進数を付けた形式で文字を出力することはありませんが、上記一覧に存在しない制御文字が含まれている場合は、この形式を使用します。上表で記載されていないバックスラッシュ付きの文字はすべて、そのまま解釈されます。不要なバックスラッシュの追加には注意してください。偶然にデータを終わりを示す印(\.)やヌル文字列(デフォルトでは\N)と合致する文字列を生成してしまうかもしれないためです。これらの文字列は他のバックスラッシュの処理を行う前に解釈されます。COPYデータを生成するアプリケーションは、データ内の改行と復帰をそれぞれ、\nと\rに変換することを強く推奨されています。現在のところ、バックスラッシュと復帰文字でデータ内の復帰を表したり、バックスラッシュと改行文字でデータ内の改行を表すことが可能です。いった表現は今後のリリースでは、受け付けられなくなる可能性があります。(例えば、UnixからWindowsあるいはその逆)。TOは各行の行末にUnix形式の改行("\n")を出力します。Windowsで稼働するサーバの場合は、サーバ上のファイルへのCOPYの場合にのみ復帰/改行("\r\n")を出力します。STDOUTは常に"\n"を送信します。/改行を行末として扱うことができます。FROMは、入力行の行末が全て共通でない場合に警告を発します。CSV形式この書式オプションは、スプレッドシートなど他の多くのプログラムで使用されるカンマ区切り値(CSV)ファイル形式をインポート、エキスポートするために使用されます。PostgreSQLの標準テキスト書式で使用されるエスケープ規則の代わりに、一般的なCSVのエスケープ機構を生成、認識します。各レコードの値はDELIMITER文字で区切られます。含む値の場合、全体の値の前後に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バイトの並びです。(この署名は、8ビットを通過させない転送方式によってファイルが破損した場合、これを容易に識別できるように設計されています。署名は、改行コード変換やNULLバイトの削除、上位ビット落ち、パリティの変更などによって変化します)。フラグフィールドこのファイル形式の重要な部分となる32ビット整数のビットマスクです。31(MSB)までの番号が付いています。このフィールドは、このファイル形式で使用される他の全ての整数フィールドと同様、(最大バイトが最初に現れる)ネットワークバイトオーダで保存されていることに注意してください。ファイル形式上の致命的な問題を表すために、16-31ビットは予約されています。この範囲に想定外のビットが設定されていることが判明した場合、読み込み先は処理を中断しなければなりません。後方互換における形式の問題を通知するために、0-15ビットは予約されています。この範囲に想定外のビットが設定されていても、読み込み先は無視すべきです。現在、1つのビットだけがフラグビットとして定義されており、残りは0でなければなりません。ビット161ならば、OIDがデータに含まれています。0ならば、含まれていません。除いた、ヘッダの残り部分のバイト長を示す32ビットの整数です。現在、これは0となっており、すぐ後に最初のタプルが続きます。今後、ヘッダ内に追加データを格納するような形式の変更があるかもしれません。読み込み側では、ヘッダ拡張データの扱いがわからない場合、そのデータをスキップしなければなりません。ヘッダ拡張領域は、それ自身で認識することができる塊の並びを保持するために用意されています。フラグフィールドは読み込み先に拡張領域の内容を知らせるものではありません。ヘッダ拡張内容の個々の設計は今後のリリースのために残してあります。この設計によって、後方互換性を維持するヘッダの追加(ヘッダ拡張チャンクの追加や下位フラグビットの設定)と後方互換性のない変更(変更を通知するための高位フラグビットの設定や必要に応じた拡張領域へのサポート情報追加)の両方に対応できます。タプル全てのタプルはタプル内のフィールド数を表す16ビットの整数から始まります(現時点では、テーブル内の全てのタプルは同一のフィールド数を持つことになっていますが、今後、これは変更される可能性があります)。その後に、タプル中のそれぞれのフィールドが続きます。(このワードが表す長さには自分自身は含まれません。したがって、0になることもあります)。特殊な値としてNULLフィールドを表す-1が用意されています。このNULLが指定された場合、値用のバイトはありません。フィールド間には整列用のパッドやその他の余計なデータはありません。現在、バイナリ書式のファイル内の全てのデータ値は、バイナリ形式(形式コード1)であると仮定されています。将来の拡張によって、列単位に形式コードを指定するヘッダフィールドが追加されることを予想したものです。関数と*recv関数(通常配布物内のsrc/backend/utils/adtディレクトリにあります)を調べなければなりません。このファイルにOIDが含まれる場合、OIDフィールドがフィールド数ワードの直後に続きます。これは、フィールドカウントを持たない点を除いて、通常のフィールドです。長さワードがあるため、苦労することなく、4バイトのOIDも8バイトのOIDも扱うことができます。これにより、望ましいと判断されれば、OIDをNULLとして表示することができます。ファイルトレーラファイルトレーラは、-1を含んだ、16ビットの整数ワードで構成されます。タプルのフィールドカウントワードを使用すれば、このワードを容易に見分けることができます。読み込み側は、フィールドカウントワードが-1でも、想定した列数でもなかった場合はエラーを報告しなければなりません。これにより、何らかの理由でデータとの同期が取れなくなったことを判定する特別な検査を行うことが可能になります。次の例では、フィールド区切り文字として縦棒(|)を使用してテーブルをクライアントにコピーします。'|');ファイルからcountryテーブルにデータをコピーします。'/usr1/proj/bray/sql/country_data';名前が'A'から始まる国のみをファイルにコピーします。'/usr1/proj/bray/sql/a_list_countries.copy';これはSTDINからテーブルにコピーするのに適したデータの例です。ZIMBABWE各行の空白文字は実際にはタブ文字であることに注意してください。以下は同一のデータをバイナリ書式で出力したものです。-cを使ってフィルタしたものを示します。テーブルには3列あり、最初のデータ型はchar(2)、2番目はtext、3番目はintegerです。全ての行の3列目はNULL値です。標準SQLにはCOPY文はありません。以下の構文は、PostgreSQLバージョン9.0より前に使用されていたもので、まだサポートされています。]この構文では、BINARYとCSVがFORMATオプションの引数ではなく、独立したキーワードとして扱われることに注意してください。以下の構文は、PostgreSQLバージョン7.3より前に使用されていたもので、まだサポートされています。