这个问题已被几个人提出,但我的问题似乎有所不同 实际上我必须将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。有两个列被用作主键的特定原因可能与本讨论无关,因为在其他表中也会出现同样的问题。
答案 0 :(得分:1)
正如错误消息所示 - 您不能在dementia_type, snapid
列中拥有两行具有相同值的行,因为它们必须是唯一的。
您必须确保两个数据库具有相同的dementia_type, snapid
值。
解决方法是在表alter table t_types_of_dementia add column id serial generated always
中添加一列,并将其用作主键,而不是当前的。