复制命令是否可以在插入时评估表达式?
例如,请考虑下表
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 ',';
出现以下错误
错误:整数
的输入语法无效
这意味着它无法评估案例表达式。有没有解决方法?
答案 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