You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入CSV至PostgreSQL表时遇唯一约束重复键值错误求助

解决PostgreSQL导入CSV时的唯一约束重复错误

首先咱们得把问题根源说透:你创建表的时候,错误地给很多本不该唯一的字段加上了UNIQUE约束——比如production_companies、genres、production_countries这些。但真实的电影数据里,这些字段本来就会有大量重复:比如很多电影都是美国公司制作的,同一类型的电影更是一抓一大把,所以导入CSV时,PostgreSQL检测到重复值就直接触发报错了。

具体解决步骤

  1. 先删除错误的表(如果表还没存重要数据的话):

    DROP TABLE IF EXISTS tmdb_5000_movies;
    
  2. 重新创建符合逻辑的表结构:
    只有id字段是电影的唯一标识,适合设为PRIMARY KEY(自带唯一约束),其他字段完全不需要UNIQUE限制。修改后的建表语句如下:

    CREATE TABLE tmdb_5000_movies (
        "budget" INT,
        "genres" VARCHAR,
        "homepage" VARCHAR,
        "id" INT PRIMARY KEY, -- 电影ID是唯一标识,设为主键即可
        "keywords" VARCHAR,
        "original_language" VARCHAR,
        "original_title" VARCHAR,
        "overview" VARCHAR,
        "popularity" DEC,
        "production_companies" VARCHAR,
        "production_countries" VARCHAR,
        "release_date" DATE,
        "revenue" BIGINT,
        "runtime" INT,
        "spoken_languages" VARCHAR,
        "status" VARCHAR,
        "tagline" VARCHAR,
        "title" VARCHAR,
        "vote_average" DEC,
        "vote_count" INT
    );
    
  3. 重新导入CSV文件:
    这时候再执行导入操作,应该就不会再出现duplicate key value violates unique constraint的错误了。

给新手的额外优化建议

你会发现genres、production_companies这些字段存的是类JSON字符串,如果后续需要查询这些字段里的具体内容(比如找所有动作片),可以把这些字段的类型改成JSONB,操作会更灵活。修改后的字段定义如下:

"genres" JSONB,
"keywords" JSONB,
"production_companies" JSONB,
"production_countries" JSONB,
"spoken_languages" JSONB

比如要查询所有动作类型的电影,就可以用这样的SQL:

SELECT * FROM tmdb_5000_movies WHERE genres @> '[{"name": "Action"}]';

内容的提问来源于stack exchange,提问作者Lsalazar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:52:47