Обсуждение: Locking vs. Exceptions
Hi,
The documentation says that function blocks with exceptions are far costlier than without one.
So if I need to implement an INSTEAD OF trigger (after checking for unique constraint violations) which way should I go ?
1. Get a table lock
2. Use 'Select ... For Update' (which could be used to lock only the desired recordsets)
3. Use Exceptions
Any advice / experiences or even pointers would be helpful.
Thanks
Robins Tharakan
The documentation says that function blocks with exceptions are far costlier than without one.
So if I need to implement an INSTEAD OF trigger (after checking for unique constraint violations) which way should I go ?
1. Get a table lock
2. Use 'Select ... For Update' (which could be used to lock only the desired recordsets)
3. Use Exceptions
Any advice / experiences or even pointers would be helpful.
Thanks
Robins Tharakan
Robins wrote:
> Hi,
>
> The documentation says that function blocks with exceptions are far
> costlier than without one.
>
I recommend against using exceptions. There is a memory leak in the
exception handler that will cause headaches if it is called many times
in the transaction.
In plpgsql, I would use:
SELECT ... FOR UPDATE;
IF FOUND THEN
UPDATE ...;
ELSE
INSERT ...;
END IF;
If you have multiple transactions doing this process at the same time,
you'll need explicit locking of the table to avoid a race condition.
--
Benjamin Minshall <minshall@intellicon.biz>
Senior Developer -- Intellicon, Inc.
http://www.intellicon.biz