Re: How to update rows from a cursor in PostgreSQL

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Ruben <ruben12(at)superguai(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How to update rows from a cursor in PostgreSQL
Date: 2003-02-22 02:56:02
Message-ID: 2274.1045882562@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Ruben <ruben12(at)superguai(dot)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.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2003-02-22 02:59:49 Re: regexp question
Previous Message Tom Lane 2003-02-22 02:51:07 Re: Views + Rules + Triggers + 7.3.2 = Upgrade Problems (was: Re: REWRITE_INVOKE_MAX and "query may contain cycles" )