Re: How to update rows from a cursor in PostgreSQL

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: How to update rows from a cursor in PostgreSQL
Дата
Msg-id 200303061549.h26FnxF27290@candle.pha.pa.us
обсуждение исходный текст
Ответ на Re: How to update rows from a cursor in PostgreSQL  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Tom Lane wrote:
> Ruben <ruben12@superguai.com> writes:
> > Since "FOR UPDATE" cursors are not supported in PostgreSQL, can I update
> > the current row of table t1?
>
> The usual hack for this is to select the table's "ctid" system column as
> part of the cursor output, and then say
>
>     UPDATE t1 SET ... WHERE ctid = 'what-you-got-from-the-cursor';
>
> This is quite fast because the ctid is essentially a physical locator.
> Note however that it will fail (do nothing) if someone else has already
> updated the same row since your transaction started.  This may or may
> not be what you want.  I think ODBC has some hack to find the ctid of
> the latest version of the row.

We do have this in TODO:

        o Allow UPDATE/DELETE WHERE CURRENT OF cursor using per-cursor tid
          stored in the backend

Tom, if they do FOR UPDATE in the cursor, no one else can modify the row
until the transaction commits, right?  I assume FOR UPDATE it required
for this functionality.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

В списке pgsql-general по дате отправления:

Предыдущее
От: Antti Haapala
Дата:
Сообщение: Re: sub select madness
Следующее
От: Antti Haapala
Дата:
Сообщение: Re: Shell Commands