| From: | Christopher Kings-Lynne <chriskl(at)familyhealth(dot)com(dot)au> |
|---|---|
| To: | David Fetter <david(at)fetter(dot)org> |
| Cc: | PG Hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Best practices: MERGE |
| Date: | 2005-03-08 03:45:19 |
| Message-ID: | 422D1FCF.4080103@familyhealth.com.au |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers pgsql-patches |
> The "correct" solution, as far as I can tell, is to acquire a LOCK on
> the table IN SHARE MODE at the beginning of the transaction, but this
> has (at least for many applications) unacceptable performance
> characteristics. Accepting that there is a slight risk of a race
> condition when *not* locking the table at the beginning of the
> transaction, what procedure minimizes this risk and recovers well from
> said race condition, should it occur?
IN SHARE MODE is not enough, you can get deadlocks. You require IN
SHARE ROW EXCLUSIVE MODE. other than that, it's a sucky solution
because it breaks concurrency. In pgsql 8, you can do it using pl/pgsql
exception handling.
Chris
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Fetter | 2005-03-08 04:08:10 | Re: Best practices: MERGE |
| Previous Message | David Fetter | 2005-03-08 03:34:49 | Best practices: MERGE |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Fetter | 2005-03-08 04:08:10 | Re: Best practices: MERGE |
| Previous Message | David Fetter | 2005-03-08 03:34:49 | Best practices: MERGE |