Postgres从文件复制 - 更改一列的值

时间:2014-06-13 14:09:30

标签: sql postgresql

我想将文件的内容复制到postgres。 文件的内容是这样的:

2014-06-13;Platform;-38193438.530000;EUR

这是我的复制代码:

COPY statistics(referencedate, platform, total, currency)
FROM '/home/output.csv'
WITH DELIMITER ';';

此复制命令有效,并插入行。但是,我需要插入平台的名称,而不是单词"平台"。我丑陋的解决方法是在COPY之前运行脚本并修改原始文件。但我并不相信没有更优雅的解决方案。

我尝试了以下代码,但它不起作用:

 COPY statistics(referencedate, platform, total, currency)
 FROM '/home/output.csv'
 WITH DELIMITER ';' AND platform AS 'AAA';

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容执行此操作:

`COPY ... FROM PROGRAM 'awk -F ; ''{ printf "%s,%s,%s,%s\n",$1,"AAA",$3,$4,$5; }'''`

(未经测试,PROGRAM仅为9.3)

即。在管道输入时使用输入文件上的过滤器。过滤器可以是您想要的任何内容。 Perl / Python / Awk / Sed /无论是什么片段或脚本。

COPY它的自我没有你想要的内置直接。在这种简单的情况下,可以 ALTER TABLE ... ALTER COLUMN platform SET DEFAULT 'AAA'和ALTER TABLE ... ALTER COLUMN platform SET NOT NULL在您要更改的列上,然后COPY .... (referencedate, total, currency) FROM ...,但它最多有点麻烦。< / p>