【问题标题】:postgresql: error duplicate key value violates unique constraintpostgresql:错误重复键值违反唯一约束
【发布时间】:2011-10-17 05:57:25
【问题描述】:

这个问题已经被几个人问过了,但我的问题似乎有所不同。
实际上,我必须将来自 postgresql 中不同数据库的相同结构化表合并到一个新数据库中。我正在做的是我使用 dblink 连接到远程数据库,读取该数据库中的该表并将其插入到当前数据库中的表中,如下所示

INSERT INTO t_types_of_dementia SELECT * FROM dblink('host=localhost port=5432 dbname=snap-cadence password=xxxxxx', 'SELECT dementia_type, snapid FROM t_types_of_dementia') as x(dementia_type VARCHAR(256),snapid integer);

这个查询第一次运行良好,但是当我再次运行它或尝试使用其他远程数据库的表运行它时:它给了我这个错误

错误:重复键值违反唯一约束 “t_types_of_dementia_pkey”

我希望这个新表由来自其他数据库的其他表的条目填充。 提出的一些解决方案讨论了序列,但我没有使用任何

当前db中表的结构是

CREATE TABLE t_types_of_dementia(
    dementia_type VARCHAR(256),
    snapid integer NOT NULL,
    PRIMARY KEY (dementia_type,snapid)
);

附:这两列都用作主键是有特定原因的,这可能与本次讨论无关,因为在其他表中也发生了同样的问题,但情况并非如此。

【问题讨论】:

    标签: sql postgresql constraints primary-key unique-constraint


    【解决方案1】:

    正如错误消息告诉您的那样,dementia_type, snapid 列中不能有两行具有相同值,因为它们必须是唯一的。

    您必须确保两个数据库具有相同的 dementia_type, snapid 值。

    一种解决方法是在您的表中添加一列 alter table t_types_of_dementia add column id serial generated always 并将其用作主键,而不是当前的。

    【讨论】:

    • 谢谢@Jonas。有没有办法放宽这个限制?
    • @Shehroz:您需要使用另一个主键,请参阅我的更新。
    • @Jonas-感谢您的指点。在其他表格中,情况可能会有所不同,但我明白你的中心思想。
    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 2011-05-25
    • 2016-09-28
    • 2020-02-15
    • 2016-07-27
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多