COPY
PostgreSQLのコマンドに関する質問がありました。一部の列の値のみを PostgreSQL テーブルにコピーしたい CSV ファイルがあります。
これを行うことは可能ですか?コマンドを使用して CSV からすべてのデータをテーブルにコピーし、ヘッダーを使用して列名にマップすることに慣れてCOPY
いますが、一部の列のみが必要な場合、これはどのように可能ですか?
COPY
PostgreSQLのコマンドに関する質問がありました。一部の列の値のみを PostgreSQL テーブルにコピーしたい CSV ファイルがあります。
これを行うことは可能ですか?コマンドを使用して CSV からすべてのデータをテーブルにコピーし、ヘッダーを使用して列名にマップすることに慣れてCOPY
いますが、一部の列のみが必要な場合、これはどのように可能ですか?
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
一時テーブルは、セッションの終了時に自動的に削除されます。処理に時間がかかる場合は、通常のテーブルを使用してください。