NBh*_*tti 2 postgresql bulk-insert
如何COPY
在 Postgres 中创建 CSV 文件以及不在 CSV 中的列的静态数据?在 MySQL 中,我可以LOAD DATA INFILE ...
对列名以及文件中不存在的列的任何值进行分析。我想用 Postgres 做类似的事情,但COPY
命令不支持。
您必须创建一个中间表作为 的目标COPY
,然后在第二步中插入到最终表中。
如果您不必保留中间表(用于交叉检查您的结果,或作为一个简单的重试点),您可以将其设为临时且未记录:
BEGIN;
CREATE TEMP UNLOGGED TABLE intermediate (... columns matching the CSV contents ...);
COPY intermediate FROM 'your.csv' WITH (FORMAT csv, ...);
INSERT INTO final_table (column1, column2, column_with_default1)
SELECT col1, col2, 'default'
FROM intermediate;
-- check if everything looks fine, row counts match the expectation, etc.
COMMIT;
Run Code Online (Sandbox Code Playgroud)
UNLOGGED
当 CSV 很大时,将阻止大量 WAL 写入。我把默认进入SELECT
的部分INSERT
,而不是(临时)表的节约资源-没有必要存储相同的默认值多次。
归档时间: |
|
查看次数: |
2501 次 |
最近记录: |