Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 带约束的Psql复制失败_Postgresql_Psql - Fatal编程技术网

Postgresql 带约束的Psql复制失败

Postgresql 带约束的Psql复制失败,postgresql,psql,Postgresql,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')),

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

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\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

你知道怎么解决这个问题吗 您的源csv似乎正在使用
(单引号)来引用所有列。您可以使用选项将其指定为引号字符

\copy
命令试图将
'old'
加载到状态列中,以检查值是否为
new
old
。额外的引号违反了约束

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

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

修复输入数据,使其不再违反约束?酷,没有注意到这一点。我按照您所描述的做了,但我现在收到了以下错误:错误:缺少列“状态”的数据\n上下文:复制示例\u表,第3行:“”\n ROLLBACKNvm,是我
\copy example_table(name,status) FROM example.sql DELIMITER ',' CSV Header QUOTE ''''