postgresql:错误重复键值违反唯一约束

时间:2011-08-01 07:34:23

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

这个问题已被几个人提出,但我的问题似乎有所不同 实际上我必须将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”

我希望这些新表由其他dbs中的其他表的条目填充。 提出的一些解决方案涉及序列,但我没有使用任何

当前db中表的结构是

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

P.S。有两个列被用作主键的特定原因可能与本讨论无关,因为在其他表中也会出现同样的问题。

1 个答案:

答案 0 :(得分:1)

正如错误消息所示 - 您不能在dementia_type, snapid列中拥有两行具有相同值的行,因为它们必须是唯一的。

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

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