2011/10/6 Rory Campbell-Lange <r...@campbell-lange.net> > I have a strange issue (postgres 8.4) trying to insert old rows back > into the s_tbls table. A check on the primary key (n_id) between > s_tbl_import and s_tbls yields no matches, yet the index on s_tbls.n_id > yields an error when attempting to insert: > > => select n_id from s_tbl_import where n_id IN ( > select n_id from s_tbls); > > n_id > ------ > (0 rows) > > => insert into s_tbls (select * from s_tbl_import); > > ERROR: duplicate key value violates unique constraint "s_tbls_pkey" > > Looks like you had duplicates in s_tbl_import. Try this: SELECT * FROM s_tbl_import WHERE n_id IN ( SELECT n_id from s_tbl_import group by n_id HAVING count(*)>1 );
Table "s_tbls" > Column | Type | > Modifiers > > ------------------+-----------------------------+-------------------------------------------------------- > n_id | integer | not null default > nextval('s_tbls_n_id_seq'::regclass) > dt_created | timestamp without time zone | default now() > dt_modified | timestamp without time zone | default now() > t_node | text | > ... > Indexes: > "s_tbls_pkey" PRIMARY KEY, btree (n_id) >