Re: Avoiding a race condition
От | Oliver Elphick |
---|---|
Тема | Re: Avoiding a race condition |
Дата | |
Msg-id | 1038071136.27507.427.camel@linda.lfix.co.uk обсуждение исходный текст |
Ответ на | Avoiding a race condition (MT <mt@open2web.com>) |
Список | pgsql-general |
On Sat, 2002-11-23 at 15:00, MT wrote: > Earlier I wrote a note asking how I could insert a record and then > display that record as verification that it had been successfully > inserted. I got several suggestions, the following which I'd like to use: > > SELECT nextval('my_sequence') as id > > Then do the insert with the sequence and all other operations with the > "id". > > I've tried to do this without success. Could someone show me the syntax > since I can't figure it out. > > I've tried: > > SELECT nextval('prodid_seq') as id; > > INSERT INTO product VALUES (nextval('prodid_seq'),'...',...,''); ^^^^^^^ That should be currval() or else you will increment the sequence twice. > OK up to this point. Not quite! > Now how do I SELECT back the record I just inserted. > > SELECT * FROM product WHERE prodid = id; > ERROR: Attribute 'id' not found SELECT * FROM product WHERE prodid = currval('prodid_seq'); > > OK, I'm not very good at SQL yet. How do you put the sequence number in > a place holder, then do the insert, and finally retrieve the record you > just inserted by matching the prodid with the number in the place holder. Just keep using currval() until you want to increment the sequence again. (If you're using a procedural language, you can store the output from the first use of nextval() in a variable; then you can use that instead of currval().) -- Oliver Elphick <olly@lfix.co.uk> LFIX Limited
В списке pgsql-general по дате отправления: