Re: PostgreSQL problem with functions - Mailing list pgsql-novice

From Tom Lane
Subject Re: PostgreSQL problem with functions
Date
Msg-id 8497.992353620@sss.pgh.pa.us
Whole thread Raw
In response to PostgreSQL problem with functions  ("Nikola Milutinovic" <Nikola.Milutinovic@ev.co.yu>)
List pgsql-novice
LOCK TABLE IN EXCLUSIVE MODE is hardly the way to program a function
that you want to be able to invoke concurrently from multiple backends.
Moreover, "SELECT max()" is going to be slow --- and you're doing it
while holding the exclusive lock!  Concurrent performance is gonna be
awful.

A much better solution to your problem is to use a sequence object to
generate the ID values.  For example:

    new_id := nextval(''seq_name'');
    INSERT INTO admin_session VALUES (new_id, a_ss, ''now'', ...);
    return new_id;

BTW, this could be the complete body of your function.  The "SELECT FROM
a_user" check would be better handled by defining a foreign-key
constraint on the a_id column.

            regards, tom lane

pgsql-novice by date:

Previous
From: "Giorgio A."
Date:
Subject: Re: Urgent
Next
From: Nabil Sayegh
Date:
Subject: Re: Upgraded to Red Hat 7.1, now my DB is toast?