Re: [SQL] Intentionally inserting duplicates without aborting

From: Herouth Maoz <herouth(at)oumail(dot)openu(dot)ac(dot)il>
To: disser(at)sdd(dot)hp(dot)com, pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] Intentionally inserting duplicates without aborting
Date: 1999-08-15 13:06:06
Message-ID: l03130306b3dc5e8795a3@[147.233.159.109]
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

At 18:59 +0300 on 12/08/1999, disser(at)sdd(dot)hp(dot)com wrote:

> What I would like to do (and have manage to kludge together in Perl
> DBI) is to attempt to insert (item_id, state, today's date) into
> item_hist, and in the cases where that item/state combo exists
> already, the insert will fail. However, if I am using {AutoCommit =>
> 0}, the whole transaction bombs, so I can only get away with this if
> I'm AutoCommit'ing.
>
> Any thoughts on how I can do this with AutoCommit => 0? I would
> rather not have to look up all the status rows to figure out if an
> error will occur.

Are you saying that inserting a (some_item_id, some_state, some_date) and
waiting for an error is more efficient than doing a SELECT 1 FROM ... WHERE
item_id = some_item_id, state = some_state and seeing whether or not you
got any rows? It shouldn't be much of a difference, since both operations
simply go through the index.

In any case, if what you want to do is to insert a bulk of data, and only
have the non-duplicates be inserted, then perhaps you should create a temp
table of ited id and state, insert all the data into it (using COPY for
faster insertions) and then:

INSERT INTO item_history
SELECT item_id, state, now() FROM temp_table t
WHERE NOT EXISTS (
SELECT * FROM item_history i
WHERE i.item_id = t.item_id AND i.state = t.state
);

Or maybe you meant that the insertion is done directly from the table item?
Then you don't need a temporary table. The general looks are the same,
though you would probably want to add things to the WHERE clause.

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Herouth Maoz 1999-08-15 13:26:31 Re: [SQL] Multiple values for a field
Previous Message Matthew Hagerty 1999-08-15 05:51:29 select [for update]??