From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | "Nikola Milutinovic" <Nikola(dot)Milutinovic(at)ev(dot)co(dot)yu> |
Cc: | "PostgreSQL general" <pgsql-general(at)postgresql(dot)org>, "PostgreSQL novice" <pgsql-novice(at)postgresql(dot)org> |
Subject: | Re: [NOVICE] PostgreSQL problem with functions |
Date: | 2001-06-12 13:47:00 |
Message-ID: | 8497.992353620@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general 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
From | Date | Subject | |
---|---|---|---|
Next Message | Mitch Vincent | 2001-06-12 14:22:12 | Re: How many no. of clients can access database simultaneously? |
Previous Message | Jeff Eckermann | 2001-06-12 13:37:33 | RE: Large OR query |
From | Date | Subject | |
---|---|---|---|
Next Message | James McMurry | 2001-06-12 19:00:27 | Re: selecting a column average into table |
Previous Message | Giorgio A. | 2001-06-12 10:52:11 | Re: Urgent |