Re: Binary Large Objects (LOB/BLOB) in Hibernate and JDBC: Unresolved issues

From: Oliver Jowett <oliver(at)opencloud(dot)com>
To: Stefan Keller <sfkeller(at)gmail(dot)com>
Cc: Radosław Smogura <rsmogura(at)softperience(dot)eu>, pgsql-general List <pgsql-general(at)postgresql(dot)org>, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Binary Large Objects (LOB/BLOB) in Hibernate and JDBC: Unresolved issues
Date: 2012-01-09 00:22:49
Message-ID: CA+0W9LMw7qvOZM=XMQRVG9KE__6vrf8St2kcYj9M2vbrQr9zjA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-jdbc

On 9 January 2012 12:40, Stefan Keller <sfkeller(at)gmail(dot)com> wrote:

> There's an important principle that the code which "allocates"
> resources is also responsible to release it.

That's one resource allocation model, yes. The other common model is
that resources are freed when there are no remaining references to
them, i.e. a GC model.

> AFAIK in this case it's JDBC which choses to use LO (which creates
> pg_largeobjects entries) and it's therefore also JDBC which has to
> clean up.

If the application calls LargeObjectManager.create() then it's also
responsible for eventually calling LargeObjectManager.unlink().

If you're using JDBC's Blob API, there's no API there to tell the
driver to actually delete the underlying data (there is Blob.free(),
but that appears to just be about freeing local resources, not the
underlying storage).
As a LO is independent storage that might have multiple references to
it (the OID might be stored in many places), without explicit deletion
you need a GC mechanism to collect unreferenced LOs eventually -
that's what vacuumlo etc are doing.

What do you suggest that the driver does differently here? (Perhaps we
could do something like interpret Blob.truncate(0) as "delete the blob
right now" - but is that what Hibernate actually does?)

(Much of this is the whole LO vs. bytea argument all over again. If
you want to store data with a lifetime that's the same as the row it's
embedded in, then bytea is a much better mapping)

Oliver

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Craig Ringer 2012-01-09 01:01:31 Re: help... lost database after upgrade from 9.0 to 9.1
Previous Message Stefan Keller 2012-01-08 23:40:08 Re: Binary Large Objects (LOB/BLOB) in Hibernate and JDBC: Unresolved issues

Browse pgsql-jdbc by date

  From Date Subject
Next Message Joseph Shraibman 2012-01-09 00:32:12 Re: problem: query result in jdbc is <> result in psql
Previous Message Joseph Shraibman 2012-01-09 00:12:19 problem: query result in jdbc is <> result in psql