Re: OIDs, CTIDs, updateable cursors and friends

From: "Dave Page" <dpage(at)vale-housing(dot)co(dot)uk>
To: "Shachar Shemesh" <psql(at)shemesh(dot)biz>, "Hackers" <pgsql-hackers(at)postgresql(dot)org>, "PostgreSQL OLE DB development" <oledb-dev(at)gborg(dot)postgresql(dot)org>
Subject: Re: OIDs, CTIDs, updateable cursors and friends
Date: 2004-02-18 13:40:01
Message-ID: 03AF4E498C591348A42FC93DEA9661B889F3CD@mail.vale-housing.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> -----Original Message-----
> From: Shachar Shemesh [mailto:psql(at)shemesh(dot)biz]
> Sent: 18 February 2004 13:18
> To: Hackers; PostgreSQL OLE DB development
> Subject: [HACKERS] OIDs, CTIDs, updateable cursors and friends
>
> Would adding "OID" to the rows returned by each "Select"
> call, and then doing "update blah where oid=xxx" when I'm
> requested to update the row sound like a reasonable stategy,
> in lieu of updateable cursors? Can anyone suggest a better way?
>

Ignoring potential OID wraparound problems (which we do in pgAdmin) this
should work, assuming there is an OID column. I would suggest trying the
following methods in sequence:

1) Use the tables primary key.
2) Use the OID (and check that only one record will be affected).
3) Build a where clause based on all known original values (and check
that only one record will be affected).
4) Fail with an appropriate error.

2 & 3 can potentially affect more than one record, but even Microsoft
code runs into that problem from time to time and fails with an
appropriate error message. In pgAdmin II we used to ask the user if they
wanted to update all matching rows, but of course that is not
appropriate in a driver.

Regards, Dave.

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Shachar Shemesh 2004-02-18 14:10:29 Re: OIDs, CTIDs, updateable cursors and friends
Previous Message Shachar Shemesh 2004-02-18 13:17:34 OIDs, CTIDs, updateable cursors and friends