Re: using limit with delete

From: Chris Smith <chris(at)interspire(dot)com>
To: Csaba Nagy <nagy(at)ecircle-ag(dot)com>
Cc: Postgres general mailing list <pgsql-general(at)postgresql(dot)org>
Subject: Re: using limit with delete
Date: 2005-04-08 00:27:00
Message-ID: 4255CFD4.6030807@interspire.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Csaba,

Because I have a where clause limiting which records I'm deleting.

I'm deleting old info from a database, so I'm doing:

DELETE FROM sessions WHERE EXISTS (SELECT sessiontime FROM sessions
WHERE sessiontime < (timenow-7days) LIMIT 100)

(timenow-7days is evaluated in PHP and made an int).

So every time the page gets hit, I'm deleting up to 100 records that are
older than 7 days..

Csaba Nagy wrote:
> Hi Chris,
>
> Just a thought: if you have to clear the table anyway, wouldn't it work
> for you to use truncate ? That should be faster than delete.
>
> HTH,
> Csaba.
>
> On Thu, 2005-04-07 at 04:11, Chris Smith wrote:
>
>>I don't care about the order in my particular case, just that I have to
>>clear the table.
>>
>>I'll try the subquery and see how I go :)
>>
>>Thanks!
>>
>>Neil Conway wrote:
>>
>>>Chris Smith wrote:
>>>
>>>
>>>>I'm trying to use a limit clause with delete, but it doesn't work at
>>>>the moment
>>>
>>>
>>>It isn't in the SQL standard, and it would have undefined behavior: the
>>>sort order of a result set without ORDER BY is unspecified, so you would
>>>have no way to predict which rows DELETE would remove.
>>>
>>>
>>>>delete from table where x='1' limit 1000;
>>>
>>>
>>>You could use a subquery to achieve this:
>>>
>>>DELETE FROM table WHERE x IN
>>> (SELECT x FROM table ... ORDER BY ... LIMIT ...);
>>>
>>>-Neil
>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 2: you can get off all lists at once with the unregister command
>>> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>>>
>
>
>

--
Regards,

Chris Smith

Unit 2, 3 National Street, Rozelle, NSW 2039 Australia

Ph: +61 2 9555 5570
Fx: +61 2 9555 5571

email: info(at)interspire(dot)com
web: http://www.interspire.com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Greg Landrum 2005-04-08 00:34:42 Re: 8.0.2 Beta 1 for Windows available
Previous Message David Fetter 2005-04-08 00:16:42 Re: sequence advances on failed insert