dataset lock

From: Philipp Kraus <philipp(dot)kraus(at)flashpixx(dot)de>
To: pgsql-general(at)postgresql(dot)org
Subject: dataset lock
Date: 2013-04-16 14:50:23
Message-ID: 42C39C32-BB5D-4FFB-9121-3B4709671EFE@flashpixx.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello,

I use a PG database on a HPC system (cluster). My processes get a dataset from the database and change the row, each process is independend.
My table shows something like: id, status, data

id = PK a unqiue number
status a enum value which "open", "waiting", "working", "done"

So each process calls a SQL statement select * from where status = "waiting", so the process should get the next waiting task, after the process
gets the task, the status should be changed to "working", so no other process shouldn't get the task. My processes are independed, so it can
be, that 2 (or more) processes call the select statement at the same time and get in this case equal tasks, so I need some locking. How can
I do this with Postgres, that each row / task in my table is read / write by one process. On threads I would create a mutex eg:

lock()
row = select * from table where status = waiting
update status = working from table where id = row.id
unlock()

do something with row

Which is the best solution with postgres? should I create a procedure which takes the next job, change it and returns the id, so each process
calls "select getNextJob()" ?

Thanks

Phil

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Nigel Heron 2013-04-16 15:07:44 Re: currval and DISCARD ALL
Previous Message Adrian Klaver 2013-04-16 13:46:50 Re: Role Authentication Failure