Re: BLOB / CLOB support in PostgreSQL - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: BLOB / CLOB support in PostgreSQL
Date
Msg-id b3aff2ee-9483-f32f-4b86-ad7f7c260ae7@2ndQuadrant.com
Whole thread Raw
In response to Re: BLOB / CLOB support in PostgreSQL  (Dave Cramer <davecramer@postgres.rocks>)
List pgsql-hackers
On 9/29/20 2:39 PM, Dave Cramer wrote:
>
>
> On Tue, 29 Sep 2020 at 14:33, Andrew Dunstan
> <andrew.dunstan@2ndquadrant.com
> <mailto:andrew.dunstan@2ndquadrant.com>> wrote:
>
>
>     On 9/29/20 10:26 AM, Peter Eisentraut wrote:
>     > On 2020-09-28 15:46, Vladimir Sitnikov wrote:
>     >> The concerns to avoid "Clob maps to text" could be:
>     >> a) Once the behavior is implemented, it is hard to change. That is
>     >> applications would rely on it (and it becomes a defacto standard),
>     >> and it would be hard to move to the proper "text with streaming
>     API"
>     >> datatype.
>     >> b) If we make «clob is text», then people might start using
>     >> update/substring APIs (which is the primary motivation for Clob)
>     >> without realizing there’s full value update behind the scenes.
>     >> Currently, they can use setString/getString for text, and it is
>     >> crystal clear that the text is updated fully on every update.
>     >
>     > When we added TOAST, we made the explicit decision to not add a
>     "LONG"
>     > type but instead have the toasting mechanism transparent in all
>     > variable-length types.  And that turned out to be a very successful
>     > decision, because it allows this system to be used by all data
>     types,
>     > not only one or two hardcoded ones.  Therefore, I'm very strongly of
>     > the opinion that if a streaming system of the sort you allude to
>     were
>     > added, it would also be added transparently into the TOAST system.
>     >
>     > The JDBC spec says
>     >
>     > """
>     > An implementation of a Blob, Clob or NClob object may either be
>     > locator based or result in the object being fully materialized
>     on the
>     > client.
>     >
>     > By default, a JDBC driver should implement the Blob, Clob and NClob
>     > interfaces using the appropriate locator type. An application
>     does not
>     > deal directly with the locator types that are defined in SQL.
>     > """
>     >
>     > (A "locator" in SQL is basically what you might call a streaming
>     handle.)
>     >
>     > So yes, this encourages the implementation of locators.  But it also
>     > specifies that if you don't have locators, you can implement this
>     > using non-large-object types.
>     >
>     >
>
>     So if I read this correctly what I have proposed is completely kosher
>     according to the spec - it's the "fully materialized on the client"
>     variant, just like the MySQL and MSSQL drivers.
>
>
> I haven't really looked at MySQL or MSSQL but do they implement the
> full CLOB API ?
> We would need to implement the full API.
>
> BTW, just because it adheres to the spec doesn't seem to hold water in
> the PostgreSQL project. Just sayin'
>
>

I take your point, but my remark was more in response to the apparent
suggestion that what I submitted was not according to spec.


There are two Clob methods I didn't implement, and one Blob method - the
set*Stream methods, I think they should be implementable, but they will
make the implementation somewhat more complex.


Anyway, at this stage let's take the discussion back to the github forums.


cheers


andrew

-- 
Andrew Dunstan                https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




pgsql-hackers by date:

Previous
From: Dave Cramer
Date:
Subject: Re: BLOB / CLOB support in PostgreSQL
Next
From: Vladimir Sitnikov
Date:
Subject: Re: BLOB / CLOB support in PostgreSQL