2013-12-11 25 views
0

我有一個表tdummy2,其中我從csv文件導入數據。之前,我已將創建和更新列設置爲now(),以使用當前時間戳自動更新列。如何在從PostgreSQL中的CSV文件導入時手動設置日期

我現在想與最新now()-interval '7 days'now-interval '30 days' etc.

此更新需要做的每一個不同的CSV文件導入,這意味着我有一個應該得到updatenow()-interval '7 days'一個CSV數據和一些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 
); 

回答

1

您可以爲您的交易期限自定義列默認,然後再切:

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來從那裏插入目標表。考慮這個相關的答案:
How to bulk insert only new rows in PostreSQL

相關問題