PostgreSQL COPY
コマンドには、CSV列をマップするフィールドを選択するオプションがありますか?
PostgreSQL COPY
コマンドは、ターゲットテーブルがその列と正確に一致することを期待しているようです。私は何かが足りないのですか、それとも実際にどのように機能するのですか?
それを可能にするいくつかの代替コマンドはありますか?
それは絶対に可能です-いつでも役立つ documentation が再び助けになります:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
つまり、次のようなことを実行できます。
COPY my_table (mt_id, mt_name, mt_created_by, ...)
FROM 'filename' [...]
CSVファイルの列を参照することはできません。これを克服するには、列の数とタイプが一致する中間テーブルを作成し、その中にCOPY
を実行してから、最終的な宛先に対してINSERT ... SELECT ...
を実行します。 Patrick7 からの重要な注釈に基づいて、中間テーブルは UNLOGGED
として定義でき、テーブルが大きい場合にWALオーバーヘッドを大幅に節約できます。