PostgreSQL COPY 命令是否可以选择将 CSV 列映射到的字段?

vfc*_*sts 5 postgresql copy csv

PostgreSQLCOPY命令是否可以选择将 CSV 列映射到的字段?

PostgreSQLCOPY命令似乎期望目标表与其列完全匹配。我错过了什么还是它实际上是如何工作的?

是否有一些替代命令可以启用它?

dez*_*zso 13

这绝对有可能 - 有用的文档再次出现:

COPY table_name [ ( column_name [, ...] ) ]
    FROM { 'filename' | PROGRAM 'command' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]
Run Code Online (Sandbox Code Playgroud)

这意味着您可以执行以下操作:

COPY my_table (mt_id, mt_name, mt_created_by, ...)
    FROM 'filename' [...]
Run Code Online (Sandbox Code Playgroud)

您不能做的是引用 CSV 文件的列。为了克服这一点,可以创建一个具有匹配的列数和类型的中间表,将其COPY放入,然后INSERT ... SELECT ...到最终目的地。根据Patrick7 的一个重要评论,中间表可以定义为UNLOGGED,当表很大时,可以节省大量的 WAL 开销。

  • “中间表”的小提示,您可以使用 UNLOGGED 表,以减少 WAL 和导入时间。 (4认同)