Re: insert only unique values in to a table, ignore rest? - Mailing list pgsql-general

From Jeremy Haile
Subject Re: insert only unique values in to a table, ignore rest?
Date
Msg-id 1168294174.8573.283751515@webmail.messagingengine.com
Whole thread Raw
In response to Re: insert only unique values in to a table, ignore rest?  (Scott Marlowe <smarlowe@g2switchworks.com>)
Responses Re: insert only unique values in to a table, ignore rest?  (George Nychis <gnychis@cmu.edu>)
List pgsql-general
> Note that things will go faster if you do your initial data load using
> "copy from stdin" for the initial bulk data load.  individual inserts in
> postgresql are quite costly compared to mysql.  It's the transactional
> overhead.  by grouping them together you can make things much faster.
> copy from stdin does all the inserts in one big transaction.

You could do "copy from file" as well right?  (no performance difference
compared to "copy from stdin")  I do this all the time.

Also - maybe I misunderstand something, but why does PostgreSQL's
implementation prohibit it from ignoring insert errors during a copy?
If you added a unique constraint to the table before copying, PostgreSQL
would generate errors due to the unique constraint violation - so I
don't think any additional locking would be required for it to simply
say "If there is an error while copying in, ignore it and continue
inserting other rows"

PostgreSQL's copy command doesn't currently support this, so the temp
table followed by a distinct select is the way to go.  But I didn't
follow all of the talk about it requiring locking the table and being
inherently impossible for PostgreSQL to support.

I've wanted a similar feature.  I select rows into a table on a regular
basis.  I'd like to be able to overlap old values and have PostgreSQL
ignore failed inserts.  SQL Server offers a flag that allows you to
ignore inserts whose primary key already exists in the table.  The only
solution in PostgreSQL is to run a query to manually delete the
duplicate rows from a temp table before inserting - which takes much
more time.

pgsql-general by date:

Previous
From: Chris Browne
Date:
Subject: Re: Autovacuum Improvements
Next
From: George Nychis
Date:
Subject: Re: insert only unique values in to a table, ignore rest?