9

COPYPostgreSQLのコマンドに関する質問がありました。一部の列の値のみを PostgreSQL テーブルにコピーしたい CSV ファイルがあります。

これを行うことは可能ですか?コマンドを使用して CSV からすべてのデータをテーブルにコピーし、ヘッダーを使用して列名にマップすることに慣れてCOPYいますが、一部の列のみが必要な場合、これはどのように可能ですか?

4

2 に答える 2

9

CSV ファイルを前処理するか、または (私がおそらく行うこと) ターゲット テーブルの一時コピーにインポートしINSERT、2 番目のステップで選択した列のみをインポートします。

CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0;
ALTER TABLE tmp ADD COLUMN etra_column1 text
             ,  ADD COLUMN etra_column2 text;  -- add excess columns
COPY tmp FROM '/path/tp/file.csv';

INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM tmp  -- only reelvant columns
WHERE  ...  -- optional, to also filter rows

一時テーブルは、セッションの終了時に自動的に削除されます。処理に時間がかかる場合は、通常のテーブルを使用してください。

于 2013-03-29T17:20:42.610 に答える