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

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to