0

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

例如考虑下表

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 ',';

出现以下错误

错误:整数的输入语法无效

这意味着它不能评估 case 表达式。有什么解决方法吗?

4

1 回答 1

1

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

据我所知,没有办法让 COPY 评估 sql 代码。

您必须预处理您的 csv 文件并将其转换为标准 sql 脚本,其中包含INSERT以下形式的语句:

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
于 2015-12-28T12:38:37.260 回答