From: | Emmanuel Charpentier <charpent(at)bacbuc(dot)dyndns(dot)org> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: How to update rows from a cursor in PostgreSQL |
Date: | 2003-02-22 08:38:31 |
Message-ID: | b37cu6$2ncq$1@news.hub.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Tom Lane wrote:
> 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.
However, it should be noted that this may fail, especially if you work on
views. I've been bitten by this.
Emmanuel Charpentier
--
Emmanuel Charpentier
From | Date | Subject | |
---|---|---|---|
Next Message | Shridhar Daithankar<shridhar_daithankar@persistent.co.in> | 2003-02-22 09:41:01 | Re: How to update rows from a cursor in PostgreSQL |
Previous Message | Tom Lane | 2003-02-22 07:53:06 | Re: optimizer bent on full table scan |