On Tue, Dec 30, 2008 at 5:41 AM, Anton Bogdanovitch <poison.box@xxxxxxxxx> wrote: > I have to insert rows to table with 95% primary key unique_violation. If you're inserting a lot of rows at once, I think you're probably better off loading all of the data into a side table that does not have a primary key, and then writing one statement to remove the duplicates and do all the inserts at once. INSERT INTO main (name, created) SELECT s.name, CURRENT_TIMESTAMP FROM (SELECT DISTINCT ON (name) FROM sidetable) s -- nuke duplicate names within sidetable LEFT JOIN main m ON s.name = m.name WHERE m.name IS NULL; -- nuke names in sidetable that are already in main I've usually found that any kind of loop in PL/pgsql is mind-numbingly slow compared to doing the same thing as a single query. ...Robert -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance