Re: Parallel transactions failing oddly

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Mauri Sahlberg <Mauri(dot)Sahlberg(at)pretax(dot)net>
Cc: <pgsql-admin(at)postgresql(dot)org>, <petri(dot)hilska(at)pretax(dot)net>
Subject: Re: Parallel transactions failing oddly
Date: 2003-08-01 00:12:35
Message-ID: 20030731170748.L29530-100000@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin


On 31 Jul 2003, Mauri Sahlberg wrote:

> Either we have found a bug in Postgres (which I seriously doubt) or we
> are being stupid clever enough way to not notice it.
>
> We have five complex "transactions" that are executed thru pq++/c++
> interface. If we run them one by one everything goes fine. But if I
> run them in parallel - in separate processes - all but the first one
> claiming the lock for "ryhmalaiset"-table will fail. And they will
> fail as soon as the first one is finished by trying to insert
> duplicate row in the shared table. Incidentally this row would also be
> the very first row they are trying to insert. They all run the same code
> but with different data.
>
> Each transaction fails in the following insert:
> LOOP
> SELECT * INTO r FROM kelaaryhma(aToimiala, aKielikoodi, pKoodi);
>
> SELECT INTO pRyhmalaiset * FROM ryhmalaiset
> WHERE
> toimiala = aToimiala AND
> ryhma = pKoodi AND
> kuukausi = aKuukausi AND
> vuosi = aVuosi;
>
> IF NOT FOUND THEN
> aMessage:= pKoodi::VARCHAR(16)||''/''||aKoodi::VARCHAR(16);
> RAISE NOTICE ''ins-ryhmalaiset %'', aMessage;
> INSERT INTO ryhmalaiset
> (toimiala, ryhma, jasen, kuukausi, vuosi, ajettu)
> VALUES
> (aToimiala, pKoodi, aKoodi, aKuukausi, aVuosi,
> ''now''::timestamp);
> END IF;
> ...
>
> Where (toimiala, ryhma, kuukausi, jasen, vuosi) are primary index
> fields. The "IF NOT FOUND" should ensure that no duplicate inserts are
> attempted but somehow it just fails when two or more processess are
> run.

The second transaction won't see the row inserted by the first transaction
until it commits (at best). Both transactions can think there are no
matching rows.

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Romildo Wildgrube 2003-08-01 00:18:47 Re: a question
Previous Message Marvin 2003-07-31 23:08:52 Re: Starting PostgreSQL server as root