Postgres复制数据&评估表达式

时间:2015-12-28 12:23:05

标签: postgresql enterprisedb postgresql-copy

复制命令是否可以在插入时评估表达式?

例如,请考虑下表

create table test1  ( a int, b int)

我们有一个要导入的文件

5  , case when b = 1 then 100 else 101
25 , case when b = 1 then 100 else 101
145, case when b = 1 then 100 else 101

以下命令填写失败

COPY test1 FROM 'file' USING DELIMITERS ',';

出现以下错误

  

错误:整数

的输入语法无效

这意味着它无法评估案例表达式。有没有解决方法?

1 个答案:

答案 0 :(得分:1)

命令COPY仅复制数据(显然)并且不评估SQL代码,如文档中所述:http://www.postgresql.org/docs/9.3/static/sql-copy.html

据我所知,没有让COPY评估sql代码的解决方法。

您必须对csv文件进行预处理,并使用此表单中的INSERT语句将其转换为标准sql脚本:

INSERT INTO your_table VALUES(145, CASE WHEN 1 = 1 THEN 100 ELSE 101 END);

然后使用您正在使用的客户端执行sql脚本。即使用psql,您将使用-f选项:

psql -d your_database -f your_sql_script