Postgresql
PostgreSQL COPY 命令是否可以選擇將 CSV 列映射到哪些欄位?
PostgreSQL
COPY
命令是否可以選擇將 CSV 列映射到哪些欄位?PostgreSQL
COPY
命令似乎期望目標表與其列完全匹配。我錯過了什麼還是它實際上是如何工作的?是否有一些替代命令可以實現這一點?
這是絕對有可能的 - 有用的文件再次來拯救:
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 成本。