Thread: deleting rows in specific order

deleting rows in specific order

From
Daniel Drotos
Date:
Hi,

What is the best way to do something like:

delete from tablename where something order by somefield...

Daniel


Re: deleting rows in specific order

From
Frank Bax
Date:
At 04:14 PM 10/9/06, Daniel Drotos wrote:
>What is the best way to do something like:
>
>delete from tablename where something order by somefield...


You cannot, because it doesn't make sense.  The "order by" clause is not 
valid on delete statement.  Queries from other processes that start while 
your delete is running will either see all the deleted rows or (perhaps) 
they will see none of them. 



Re: deleting rows in specific order

From
Markus Schaber
Date:
Hi, Daniel,

Daniel Drotos wrote:

> What is the best way to do something like:
> 
> delete from tablename where something order by somefield...

There should be no need for this, because a delete is atomic due to the
transaction system.


What is it that you're trying to achieve with the ordered delete? Maybe
there's a better way to solve your underlying problem.


HTH,
Markus

-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org


Re: deleting rows in specific order

From
Daniel Drotos
Date:
On Wed, 11 Oct 2006, Markus Schaber wrote:

> What is it that you're trying to achieve with the ordered delete? Maybe
> there's a better way to solve your underlying problem.

I've a table which has a field for some info (number) and a date field 
(insertion date) and others.

After inserting new rows into this table, very old rows are going to 
be deleted. But value of deleted info should be remembered somehow, so 
there is a trigger on delete which keeps sum of the deleted info 
values in a separate table. This makes the application happy.

Trigger's algorithm is a little bit more dificult which I would be 
able to simplify if rows are deleted in date order.

Now I'm doing it in a plpgsql function using a `for in select loop' to 
delete rows one by one.

Daniel


Re: deleting rows in specific order

From
Markus Schaber
Date:
Hi, Daniel,

Daniel Drotos wrote:

>> What is it that you're trying to achieve with the ordered delete? Maybe
>> there's a better way to solve your underlying problem.
> 
> I've a table which has a field for some info (number) and a date field
> (insertion date) and others.
> 
> After inserting new rows into this table, very old rows are going to be
> deleted. But value of deleted info should be remembered somehow, so
> there is a trigger on delete which keeps sum of the deleted info values
> in a separate table. This makes the application happy.
> 
> Trigger's algorithm is a little bit more dificult which I would be able
> to simplify if rows are deleted in date order.

Ah, I see.

I don't know exactly what you're doing here, but at least for a sum, the
order of summed values is not relevant.

And due to the transaction system, other applications won't see
inconsistent intermediate states, as the whole DELETE run and all
trigger calls are part of the same transaction.

> Now I'm doing it in a plpgsql function using a `for in select loop' to
> delete rows one by one.

I'm afraid that this is the only solution if you can't simplify the
trigger by other means.

HTH,
Markus
-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org


Re: deleting rows in specific order

From
Bruno Wolff III
Date:
On Wed, Oct 11, 2006 at 21:31:37 +0200, Daniel Drotos <drdani@mazsola.iit.uni-miskolc.hu> wrote:
> On Wed, 11 Oct 2006, Markus Schaber wrote:
> 
> After inserting new rows into this table, very old rows are going to 
> be deleted. But value of deleted info should be remembered somehow, so 
> there is a trigger on delete which keeps sum of the deleted info 
> values in a separate table. This makes the application happy.

You need to be careful if two of these can run at the same time if you
are adding the values to prexisting sums otherwise you might end up summing
just the values from one of the delete sets.