Intentionally inserting duplicates without aborting - Mailing list pgsql-sql

From disser@sdd.hp.com
Subject Intentionally inserting duplicates without aborting
Date
Msg-id u907h9eij.fsf@sdd.hp.com
Whole thread Raw
Responses Re: [SQL] Intentionally inserting duplicates without aborting
List pgsql-sql
I'm fairly new to SQL, so please bear with me.

I'm writing an application in which I represent an item in a table,
and I would also like a history table in which I represent the item as
it exists on various dates.

The item's primary key is an integer.  I have represented the history
table with a compound key of the item's primary key and a column
indicating the state of that item.  Eg.

create table item (item_id        integer        primary key,state        varchar(8)
);

create table item_hist (item_id        integer        primary key,state        varchar(8),date        date,
primary key (item_id, state)
);

It happens that I have to query another application for the status of
these items, and it is vastly more efficient to get the status of all
the items than it is to query for each individually.

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.

--Dave




pgsql-sql by date:

Previous
From: "Frank Morton"
Date:
Subject: Select Maximum Question
Next
From: Tom Lane
Date:
Subject: Re: [SQL] Select Maximum Question