Re: Possible to prevent transaction abort?
От | Johan Nel |
---|---|
Тема | Re: Possible to prevent transaction abort? |
Дата | |
Msg-id | gtfhei$gs9$1@news.motzarella.org обсуждение исходный текст |
Ответ на | Possible to prevent transaction abort? (Adam B <adamb@videx.com>) |
Ответы |
Re: Possible to prevent transaction abort?
|
Список | pgsql-general |
Adam B wrote: > Hello all, > > Is it possible to prevent Postgre from aborting the transaction upon a > constraint violation? From the help files maybe the following could get you on the right track: This example uses exception handling to perform either UPDATE or INSERT, as appropriate: CREATE TABLE db (a INT PRIMARY KEY, b TEXT); CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS $$ BEGIN LOOP -- first try to update the key UPDATE db SET b = data WHERE a = key; IF found THEN RETURN; END IF; -- not there, so try to insert the key -- if someone else inserts the same key concurrently, -- we could get a unique-key failure BEGIN INSERT INTO db(a,b) VALUES (key, data); RETURN; EXCEPTION WHEN unique_violation THEN -- do nothing, and loop to try the UPDATE again END; END LOOP; END; $$ LANGUAGE plpgsql; HTH, Johan Nel Pretoria, South Africa.
В списке pgsql-general по дате отправления: