Yeah, #1 sounds good. If you're interested in the PG BLOB stuff (just for curiousity's sake) the CR makes use of it, and the file lob.sql has the table definitions. All it does is slice the data into 8KB chunks with a common id and sequence number. The common id number is what's stored in the LOB column and what's passed to the driver when you stuff content in or grab it out.
<p>
So the Nth lob is stored as tuples in the from (N, 1, data), (N, 2, data), etc. The driver does a "select data from lob where lob_id = :lob_id order by segment_sequence", then pastes the segments into one big piece.
<p>That's all there is to it for a character large object. Binary large objects are uuencoded.
<p>Of course, as of 7.1 the text type is unbounded and character large objects are no longer needed. And 7.2 will have a real binary large object type (storing them in 7.1 isn't a problem, I/O is the problem).
<p>So eventually the driver hack will go away entirely.