Re: Err. compiling func. with SET TRANS... - Mailing list pgsql-sql

From Christopher Kings-Lynne
Subject Re: Err. compiling func. with SET TRANS...
Date
Msg-id GNELIHDDFBOCMGBFGEFOCEJDCBAA.chriskl@familyhealth.com.au
Whole thread Raw
In response to Err. compiling func. with SET TRANS...  (otisg@ivillage.com)
List pgsql-sql
> CREATE FUNCTION simple_fun() RETURNS INTEGER AS '
> BEGIN
>   SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
>   BEGIN;
>   SELECT 1;
>   END;
>   RETURN 1;
> END;
> ' LANGUAGE 'plpgsql';
>
> This is as simple as it gets.
> I think my syntax is correct (I checked Practical PostgreSQL book
> as well as a number of 7.2 PDF documents, etc.).
>
> Am I missing a secret ingredient here?

I'm no PL/PgSQL expert, but I think that you cannot do transactions within a
function (this is because postgres doesn't support nested transactions.

However, since the function will run inside a transaction anyway, just do
this:

CREATE FUNCTION simple_fun() RETURNS INTEGER AS '
BEGIN SELECT 1; RETURN 1;
END;
' LANGUAGE 'plpgsql';

Now, of course you can't do your isolated transaction, so you'll need to
create the function above and then use it like this:

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT simple_fun();
COMMIT;

Chris



pgsql-sql by date:

Previous
From: "D'Arcy J.M. Cain"
Date:
Subject: Re: INSERT requires SERIAL column?
Next
From: Bruno Wolff III
Date:
Subject: Re: Bad design or SQL statment quandary