【问题标题】:Having duplicate rows on a primary key and unique constraints in postgres在 postgres 中具有主键和唯一约束的重复行
【发布时间】:2019-04-06 17:06:22
【问题描述】:

我有 4 个表,从 1000 万行到 2500 万行不等。我首先创建了一个表,其中一个表具有 serial_no 作为主键,其余的具有两列的组合作为唯一约束。

然后我向它们插入了大的 csv 文件,这很成功。然后我使用 upsert 技术添加了更多记录,这也很顺利。但是当我随机选择特定的序列号时,我注意到其中一些有重复的行。以确保我随后按 serial_no 分组并按 count(*) > 1 过滤,果然,即使有约束,许多记录也会重复。这里可能是什么问题?

我读过一篇以前的帖子,上面说旧版本的 Postgres(即 9.2 和更早版本)有一个错误,但据说已经修复。我使用的是版本 10。此外,所有表在各自的唯一约束上都有重复的记录。

【问题讨论】:

  • 您必须展示您的 CREATE TABLE 语句和一个您认为违反这些限制的数据示例。
  • 我发现了问题。我没有手动创建这些表,而是使用 pgAdmin4 接口,天真地选择从另一个表继承,以为它只会复制它。

标签: sql postgresql


【解决方案1】:

环顾四周后,我找到了答案。分享给其他可能面临类似问题的人。

所以问题是我使用继承来创建我的表。我以前从未处理过继承问题,所以当我使用 pgAdmin4 接口创建表时,我选择从其他表继承,认为这只是创建具有相似列的相似表的快捷方式。好吧,事实并非如此,事实证明在继承的表之间没有强制执行主键。

我最终删除了所有表并从头开始,而不使用继承。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2012-03-03
    • 2011-06-26
    相关资源
    最近更新 更多