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