Re: Need LIMIT and ORDER BY for UPDATE

Поиск
Список
Период
Сортировка
Искать
От
John D. Burger
Тема
Re: Need LIMIT and ORDER BY for UPDATE
Дата
Msg-id
87FD4634-549D-45D8-9063-5B8506B00A54@mitre.org
Ответ на
Список
Дерево обсуждения
Need LIMIT and ORDER BY for UPDATE "D. Dante Lorenso" <dante@lorenso.com>
Re: Need LIMIT and ORDER BY for UPDATE Bill Moran <wmoran@potentialtech.com>
Re: Need LIMIT and ORDER BY for UPDATE "D. Dante Lorenso" <dante@lorenso.com>
Re: Need LIMIT and ORDER BY for UPDATE Bill Moran <wmoran@potentialtech.com>
Re: Need LIMIT and ORDER BY for UPDATE "John D. Burger" <john@mitre.org>
Re: Need LIMIT and ORDER BY for UPDATE "D. Dante Lorenso" <dante@lorenso.com>
Re: Need LIMIT and ORDER BY for UPDATE "John D. Burger" <john@mitre.org>
D. Dante Lorenso wrote:

> I'd really like to have ORDER BY and LIMIT for UPDATE and DELETE  
> commands.  Is this possible?
>
>   UPDATE invoice i
>   SET reserve_ts = NOW() + '1 hour'::timestamp
>   FROM account a
>   WHERE a.acct_id = i.acct_id
>   AND i.reserve_ts < NOW()
>   AND a.status = 'A'
>   AND i.is_paid IS FALSE
>   ORDER BY i.create_ts ASC
>   LIMIT 1
>   RETURNING invoice_id;
>
> This query would find JUST ONE invoice record which is not paid and  
> reserve the right to operate on the row using the 'reserve_ts'  
> column for all active accounts.  The one row would be the oldest  
> invoice matching the criteria.  Only that one row would be updated  
> and the invoice_id of the updated row (if any) would be returned.

> Can something like what I want be added in a future version?  Ideas  
> or alternatives?  I don't see how I can rewrite this query as a  
> single statement any other way and get the same expectations.

Doesn't this do it, assuming invoice_id is unique?

   UPDATE invoice
   SET reserve_ts = NOW() + '1 hour'::timestamp
   where invoice_id =
	(select invoice_id from invoice i,
		account a
	WHERE a.acct_id = i.acct_id
	AND i.reserve_ts < NOW()
	AND a.status = 'A'
	AND i.is_paid IS FALSE
	ORDER BY i.create_ts ASC
	LIMIT 1)
   RETURNING invoice_id;

- John Burger
   MITRE
В списке pgsql-general по дате отправления
От: Bill Moran
Дата:
От: Tatsuo Ishii
Дата:
Сообщение: timestamp with time zone
FAQ