【问题标题】:Postgres copy data & evaluate expressionPostgres 复制数据并评估表达式
【发布时间】:2015-12-28 12:23:04
【问题描述】:

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

例如考虑下表

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 表达式。有什么解决办法吗?

【问题讨论】:

  • 你自己构建了那个文件吗?
  • 是的,它是一个迁移脚本的输出

标签: postgresql enterprisedb postgresql-copy


【解决方案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 脚本。 IE。使用psql,您将使用-f 选项:

psql -d your_database -f your_sql_script

【讨论】:

  • 是的,我知道它适用于插入语句,出于性能原因,我检查了复制命令
  • 嗯,简短的回答是“不,没有解决方法”(AFAIK)
猜你喜欢
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多