Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: BLOB is read into memory instead of streaming (bug?)


  • From: Kris Jurka <books(at)ejurka(dot)com>
  • To: Andrew Perepelytsya <aperepel(at)gmail(dot)com>
  • Cc: pgsql-jdbc(at)postgresql(dot)org
  • Subject: Re: BLOB is read into memory instead of streaming (bug?)
  • Date: Wed, 30 Apr 2008 22:43:00 -0400 (EDT)
  • Message-id: <Pine.BSO.4.64.0804302236360.24724@leary.csoft.net> <text/plain>



On Wed, 30 Apr 2008, Andrew Perepelytsya wrote:

I'm trying to stream a BLOB from the database, and expected to get it
via rs.getBinaryStream(1), but the execution fails without reaching
this point:

org.postgresql.util.PSQLException: Ran out of memory retrieving query
results.
Exception: java.lang.OutOfMemoryError: Java heap space
Stack Trace:
java.lang.OutOfMemoryError: Java heap space
	at org.postgresql.core.PGStream.ReceiveTupleV3(PGStream.java:349)

CREATE TABLE jackrabbit_x0020_core_binval
(
 binval_id character varying NOT NULL,
 binval_data bytea NOT NULL
)
WITH (OIDS=FALSE);


The expected behavior is to execute a statement and get a ref to the
blob's stream, read it from there, which doesn't work yet
unfortunately.


There are two methods to store binary data in pg and they have different access methods and performance characteristics. Bytea data is expected to be shorter and is returned in whole with a ResultSet by the server. For larger data you want to use large objects which return a pointer (oid) to the actual data which you can then stream from the server at will.

This page describes some of the differences between the two and demonstrates using a pg specific api to access large objects, but getBlob/setBlob will work just fine.

http://jdbc.postgresql.org/documentation/83/binary-data.html

Kris Jurka



Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group