備忘録的プログラミングリファレンス

データのエクスポートとインポート

 PostgreSQL におけるデータのエクスポートとインポートについてです。 PostgreSQL に蓄積されたデータを csv ファイルとして出力する、取り込むといったことができます。

 ここでは、psql コマンドプロントで \COPY コマンドを使います。
 \COPY コマンドによってPostgreSQLデータベースのテーブルレコードの出力と取り込みができます。

データのエクスポート

データの出力コマンド
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
    TO { 'filename' | PROGRAM 'command' | STDOUT }
    [ [ WITH ] ( option [, ...] ) ]

 表計算用のCSVファイルとして出力することを前提にしています。以下の条件でCSV出力します。 ここでは、ユーザー制約を回避するために/copyメタコマンドを使用しています。

  • レコードの先頭にカラム名を付加
  • NULL値以外は引用符で囲む
  • NULL値は空文字化

 以下の例の'file_name'にファイルパスを含みます。table_nameはテーブル名、'file_name'はファイル名として読みかえて下さい。 データの区切り文字はCSVではデフォルトでカンマ「,」になります。

CSVファイルとして出力
=> \COPY table_name TO 'file_name' WITH CSV HEADER FORCE QUOTE * NULL AS '';

 指定したオプションは以下のような機能があります。

HEADERレコードの先頭にカラム名を加える。
FORCE QUOTE *非NULL値は強制的に全て引用符で囲む。CSVで\COPY TOのときのみ機能。
NULL AS ''NULL値は空文字に置き換える

 CSVファイルを出力するだけでしたら以下のようになります。

CSVファイルとして出力

=> \COPY table_name TO 'file_name' WITH CSV;
	

データのインポート

データの取り込み
COPY table_name [ ( column_name [, ...] ) ]
    FROM { 'filename' | PROGRAM 'command' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]

 以下の条件のCSVファイルを取り込みます。ここでは、ユーザー制約を回避するために/copyメタコマンドで使用しています。
 注意点として、テーブルに取り込むレコードが追加されます。取り込むテーブルに何もデータが無い状態か、追加してもよい状態である必要があります。

  • レコードの先頭にカラム名がある
  • NULL値は空文字
CSVファイルを取り込む
=> \COPY table_name FROM 'file_name' WITH CSV HEADER NULL AS '';

 指定したオプションは以下のような機能があります。

HEADERレコードの先頭はカラム名のレコード
NULL AS ''NULL値は空文字になっている

CSVファイルの編集

 もし、CSVファイルから必要なカラムだけを抽出したい場合は、CSVファイルを編集しなければなりません。

 CSVファイルの編集方法は「CSVファイルの編集」を参考にしてみて下さい。