带约束的 Psql COPY 失败
Psql COPY with constraint fails
我在服务器中有这样一个table:
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。第一行包含 header:
name_of_class,status
'CLASSNAME','old';
然后我尝试 运行 一个 psql \copy 到 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'
加载到检查值是 new
还是 old
的状态列中。多余的引号违反了约束条件。
\copy example_table(name,status) FROM example.sql DELIMITER ',' CSV Header QUOTE ''''
需要 4 个单引号,因为 1 指定实际引号字符,1 用于转义引号字符,2 包含转义引号字符。
我在服务器中有这样一个table:
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。第一行包含 header:
name_of_class,status
'CLASSNAME','old';
然后我尝试 运行 一个 psql \copy 到 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'
加载到检查值是 new
还是 old
的状态列中。多余的引号违反了约束条件。
\copy example_table(name,status) FROM example.sql DELIMITER ',' CSV Header QUOTE ''''
需要 4 个单引号,因为 1 指定实际引号字符,1 用于转义引号字符,2 包含转义引号字符。