带约束的PSQL复制失败 [英] Psql COPY with constraint fails

查看:22
本文介绍了带约束的PSQL复制失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在服务器中有一个这样的表:

CREATE TABLE example_table (
id                          BIGSERIAL PRIMARY KEY,
name                        VARCHAR(70) NOT NULL,
status                      VARCHAR(70) NOT NULL CONSTRAINT status_enum CHECK (status IN ('old', 'new')),
UNIQUE (id, name)
);

我有一个SQL文件,Example.sql。第一行包含一个标题:

name_of_class,status
'CLASSNAME','old';

我尝试将psql复制到Google服务器:

PGPASSWORD=password psql -d database --username username --port 5432 --host 11.111.111 << EOF
    BEGIN;
    copy example_table(name,status) FROM example.sql DELIMITER ',' CSV Header
    COMMIT;
EOF

然后我收到以下错误:

ERROR:  new row for relation "example_table" violates check constraint "status_enum"
DETAIL:  Failing row contains (1, 'CLASSNAME', 'old';).
CONTEXT:  COPY example_table, line 2: "'CLASSNAME','old';"
ROLLBACK

有什么办法解决这个问题吗?🙂

csv

您的源推荐答案似乎正在使用'(单引号)引用所有列。您可以使用选项QUOTE

将其指定为引号字符 copy命令正在尝试将'old'加载到状态列中,该列检查值是否为newold。多余的引号违反了限制。

copy example_table(name,status) FROM example.sql DELIMITER ',' CSV Header QUOTE ''''

需要4个单引号,因为1指定实际的引号字符,1转义引号字符,2括起转义引号字符。

这篇关于带约束的PSQL复制失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆