| 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: | Whole Thread | Raw Message | 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 |