Re: Queue in SQL - Mailing list pgsql-sql

From Andrew G. Hammond
Subject Re: Queue in SQL
Date
Msg-id E169C8c-00025D-00@xyzzy.lan.internal
Whole thread Raw
In response to Queue in SQL  ("Gyorgy Molnar" <gyorgy.molnar@home.com>)
List pgsql-sql
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2001 November 27 09:11 am, Gyorgy Molnar wrote:

> I need to store some incoming data and retrieve them one by one (LIFO).
> Different processes will manage the storage and the retrieval.
> How can I retrieve only the first row from a table?

DROP TABLE queue; DROP SEQUENCE queue_id_seq;
CREATE TABLE queue (id SERIAL UNIQUE, data TEXT);

- -- to insert into queue
INSERT INTO queue (data) VALUES ('first');
INSERT INTO queue (data) VALUES ('second');

- -- to remove from queue
BEGIN;
LOCK queue IN EXCLUSIVE MODE;
SELECT * FROM queue ORDER BY id LIMIT 1;
DELETE FROM queue WHERE id = 1;     -- use the id retrieved above
COMMIT;

Key features:
- - the SERIAL data type draws it's values from a SEQUENCE, which allows us to 
easily maintain the order of the queue.
- - by marking it UNIQUE, we have implicitly defined an index on the column, 
which will make the ORDER BY clause in the SELECT and the WHERE clause in the 
DELETE more efficient.
- - wrapping the whole thing in a transaction and using a LOCK should ensure 
correct behaviour in a concurrent situation.

- -- 
Andrew G. Hammond     mailto:drew@xyzzy.dhs.org   http://xyzzy.dhs.org/~drew/
56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F                  613-389-5481
5CD3 62B0 254B DEB1 86E0  8959 093E F70A B457 84B1
"To blow recursion you must first blow recur" -- me
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iEYEARECAAYFAjwFVTsACgkQCT73CrRXhLHEJQCeNVW/3xh/PTfuRsykUz8+ff55
vVEAniFOBIC4FBEeKFwYKN103YbKXFyd
=WMz8
-----END PGP SIGNATURE-----


pgsql-sql by date:

Previous
From: "Andrew G. Hammond"
Date:
Subject: Re: email address for questions
Next
From: "Josh Berkus"
Date:
Subject: Re: email address for questions