Re: autonomous transactions

From: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>
To: Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: autonomous transactions
Date: 2016-09-15 12:34:13
Message-ID: 5d0f79c4-eacc-fa84-cd63-01a2a1395d7d@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 8/31/16 12:38 AM, Jaime Casanova wrote:
> On 30 August 2016 at 20:50, Peter Eisentraut
> <peter(dot)eisentraut(at)2ndquadrant(dot)com> wrote:
>>
>> - Patches to PL/pgSQL to implement Oracle-style autonomous transaction
>> blocks:
>>
>> AS $$
>> DECLARE
>> PRAGMA AUTONOMOUS_TRANSACTION;
>> BEGIN
>> FOR i IN 0..9 LOOP
>> START TRANSACTION;
>> INSERT INTO test1 VALUES (i);
>> IF i % 2 = 0 THEN
>> COMMIT;
>> ELSE
>> ROLLBACK;
>> END IF;
>> END LOOP;
>>
>> RETURN 42;
>> END;
>> $$;
>>
>
> this is the syntax it will use?

That is the syntax that Oracle uses. We could make up our own.

> i just compiled this in head and created a function based on this one.
> The main difference is that the column in test1 it's a pk so i used
> INSERT ON CONFLICT DO NOTHING
>
> and i'm getting this error
>
> postgres=# select foo();
> LOG: namespace item variable itemno 1, name val
> CONTEXT: PL/pgSQL function foo() line 7 at SQL statement
> STATEMENT: select foo();
> ERROR: null value in column "i" violates not-null constraint
> DETAIL: Failing row contains (null).
> STATEMENT: INSERT INTO test1 VALUES (val) ON CONFLICT DO NOTHING
> ERROR: null value in column "i" violates not-null constraint
> DETAIL: Failing row contains (null).
> CONTEXT: PL/pgSQL function foo() line 7 at SQL statement
> STATEMENT: select foo();
> ERROR: null value in column "i" violates not-null constraint
> DETAIL: Failing row contains (null).
> CONTEXT: PL/pgSQL function foo() line 7 at SQL statement
>
> this happens even everytime i use the PRAGMA even if no START
> TRANSACTION, COMMIT or ROLLBACK are used

The PL/pgSQL part doesn't work well yet. If you want to play around,
use the PL/Python integration.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2016-09-15 12:41:35 Re: WIP: About CMake v2
Previous Message Michael Paquier 2016-09-15 12:32:27 Re: OpenSSL 1.1 breaks configure and more