Re: [HACKERS] Re: [INTERFACES] New pg_type for large object - Mailing list pgsql-interfaces

From David Hartwig
Subject Re: [HACKERS] Re: [INTERFACES] New pg_type for large object
Date
Msg-id 3532213D.9B84B992@insightdist.com
Whole thread Raw
In response to Re: [INTERFACES] New pg_type for large object  (Peter T Mount <pgint@maidast.demon.co.uk>)
Responses Re: [HACKERS] Re: [INTERFACES] New pg_type for large object  (The Hermit Hacker <scrappy@hub.org>)
List pgsql-interfaces

Peter T Mount wrote:

> On Thu, 9 Apr 1998, David Hartwig wrote:
>
> > Greetings,
> >
> > We are putting the finishing touches on some enhancements to the ODBC
> > driver.   One  feature, in particular, uses large objects to implement
> > OLE data types.   We are rather please with the way it is working.   Via
> > MS Access, we have been able to INSERT and SELECT objects, such as VISIO
> > drawings, Word Documents, and WAV sound clips.    However, we've run
> > into two problems.
> >
> > The first is, that when we update the OID which points to the large
> > object, the large object is orphaned.  I realize that at the time of the
> > update, we could select the old OID and subsequently drop the large
> > object.  The problem is that general purpose tools such as MS Access do
> > not provide an clean framework for invoking such a query.
> > Specifically, UPDATE statements would have to be torn apart to build
> > such a SELECT statement.  In the short term I can build a separate
> > daemon to track down the orphans.   I hope VACUUM will eventually handle
> > these.
> >
> > The second, and more difficult, problem is that there is no large object
> > data type.  When we gather table info in the driver we have no idea that
> > an OID may actually be a large object.   What we need is a large object
> > data type.  Furthermore, the data type must have a stable OID so the we
> > can recognize it when we gather table info.  We have tested the driver
> > by creating our own date type.  However, with the existing function
> > scoping of our driver, it is extremely difficult to dynamically locate a
> > user defined large object data type.    So for testing we have compiled
> > in our "lo" data type OID.
> >
> > What I would like to know is, can a large object data type be added as
> > an internal data type?    The various "lo_" functions should eventually
> > be overloaded (or modified) to be able to use this data type.   But it
> > is not necessary at this time.  I believe this addition is a very low
> > risk change, and I would very much like to get to have it in the 6.3.2
> > release for distribution.   May I submit the patch, or would someone
> > kindly hack it in for us?
>
> I've actually started to look at this for JDBC, as it too has the orphan
> problem. I went down two routes. One using triggers, but that had the
> problem that triggers are not inherited, so I started to look at rules.
>
> However, as usual, my pay job had to take precidence, so I was about to
> start looking at it today.
>
> I'd like to see your solution to this.

We are going to wait to get a  large object data type built into 6.4.    In the
meantime we are going to require the DBA to create an "lo" data type in the
database.  We will include the SQL create script as part of the driver release.
Then, we'll query the database for the oid of the "lo" data type at connect
time.   Not very elegant, but it get the job done until 6.4.

As far as those lo orphans go, we'll will put together a cleanup script. to
search for "lo" attributes in each database and make sure that something points
each large object in pg_class.   We will have to distribute this script as part
of the ODBC package to be run at some interval on the server.    Eventually, it
would seems, that this should be part of the VACUUM process.Marc,Any word on when
this ODBC this solution will be available.


Attachment

pgsql-interfaces by date:

Previous
From: Tom Good
Date:
Subject: ecpg *very* problematic...
Next
From: The Hermit Hacker
Date:
Subject: PostODBC driver replaced...sort of...