代码之家  ›  专栏  ›  技术社区  ›  longhh

带约束的Psql复制失败

  •  2
  • longhh  · 技术社区  · 7 年前

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

    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文件。sql。第一行包含标题:

    name_of_class,status
    'CLASSNAME','old';
    

    我试着运行一个psql复制到谷歌服务器:

    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
    

    你知道怎么解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Haleemur Ali    7 年前

    您的源csv似乎正在使用 ' (单引号)引用所有列。您可以使用选项将其指定为引号字符 QUOTE

    \copy 命令正在尝试加载 'old' 进入状态列,检查值是否为 new old . 额外的引号违反了约束。

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