Postgresql

PostgreSQL COPY 命令是否可以選擇將 CSV 列映射到哪些欄位?

  • November 15, 2021

PostgreSQLCOPY命令是否可以選擇將 CSV 列映射到哪些欄位?

PostgreSQLCOPY命令似乎期望目標表與其列完全匹配。我錯過了什麼還是它實際上是如何工作的?

是否有一些替代命令可以實現這一點?

這是絕對有可能的 - 有用的文件再次來拯救:

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 成本。

引用自:https://dba.stackexchange.com/questions/132627