如何在PostgreSQL中从CSV文件导入时手动设置日期



我有一个表tdummy2,从csv文件导入数据。早些时候,我已经将创建和更新列设置为now(),以使用当前时间戳自动更新列。

我现在想用日期now()-interval '7 days'now-interval '30 days' etc. 导入我的数据

每次导入不同的csv文件时都需要进行此更新,这意味着我有一个csv数据,应该将update作为now()-interval '7 days',将一些csv文件数据作为now()-interval -'14 days',依此类推

如何使用PostgreSQL数据库做到这一点?我应该每次都手动执行吗?或者有什么方法可以在导入的同时更新列吗?

我当前的表模式:

create table tdummy2 (
 number1 integer,
 digit integer,
 type_digit integer,
 total integer,
 word character varying(256),
 apk character varying(256),
 version1 character varying(256),
 created  timestamp without time zone DEFAULT now() NOT NULL,
 updated  timestamp without time zone DEFAULT now() NOT NULL
);

您可以为事务的持续时间设置一个自定义列默认值,然后重置它:

BEGIN;
ALTER TABLE tbl ALTER COLUMN created SET DEFAULT (now() - interval '7 days')
               ,ALTER COLUMN updated SET DEFAULT (now() - interval '7 days');
COPY ...;
ALTER TABLE tbl ALTER COLUMN created SET DEFAULT now()
               ,ALTER COLUMN updated SET DEFAULT now();
COMMIT;

对多列使用单个ALTER TABLE语句,这样更便宜。

请确保在单个事务(在BEGIN; ... COMMIT;块内)中完成所有操作,并发事务永远不会看到更改。不过,这将在事务期间锁定表。

或者使用一个临时表COPY,然后从那里插入到目标表中。考虑一下这个相关的答案:
如何在PostreSQL 中大容量只插入新行

最新更新