begin;
-- create temporary table, its columns NEED to match source file
-- you can also specify all columns manually, they just need to match file.
create temporary table tmp_table as select * from source_table where false;
-- either from file
copy tmp_table ('list of columns IN THE FILE' ) from '/data/table.csv' WITH (FORMAT csv, HEADER false);
-- or from gzip
copy tmp_table ('list of columns IN THE FILE' ) from program 'zcat /data/table.csv.gz' WITH (FORMAT csv, HEADER false);
-- you can add, drop, compute additional columns if needed
alter table tmp_table ADD COLUMN IF NOT EXISTS new_column date default NULL;
insert into source_table (columns, in, the, target, table) select columns, in, the, temp, table from tmp_table where optional=conditions on conflict do nothing ;
drop table if exists tmp_table;
commit;
2条答案
按热度按时间camsedfj1#
使用“剪切”命令删除第一列,然后导入。
不是一个与postgresql相关的答案,而是更多关于命令行工具。
dced5bon2#
我最近遇到了类似的问题。我用下面的代码解决了这个问题:
这将创建一个临时表,其中的列需要与文件中的列相匹配。然后将数据加载到该表中。一旦你在数据库中有了数据,你就可以随心所欲地改变它们。
这种方法允许您修改数据、重新排列列以及添加或删除它们。你也可以使用db-do id查找表中的其他表来转换数据。您还可以使用on conflict cause处理冲突。请注意,根据您创建临时表的方式,一旦发出提交/回滚,它就可以被删除。