Обсуждение: Error in connector or driver with big bytea

Поиск
Список
Период
Сортировка

Error in connector or driver with big bytea

От
Hernan Danielan
Дата:
Hello! I have a problem for several days now. I am trying to insert a record with a file of 1.4MB in a postgre database with a JDBC connector. When i insert files around 100KB it works great. However it does not work with greater ones. I use both method bytea and oid but both of them give me the same error in the database log:


2010-05-22 15:30:44 ART LOCATION:  exec_bind_message, postgres.c:1769
2010-05-22 15:30:44 ART LOG:  08006: could not send data to client: Connection reset by peer
2010-05-22 15:30:44 ART LOCATION:  internal_flush, pqcomm.c:1108
.....
2010-05-22 15:30:45 ART LOCATION:  exec_execute_message, postgres.c:1988
2010-05-22 15:30:46 ART LOG:  08006: could not send data to client: Broken pipe
2010-05-22 15:30:46 ART LOCATION:  internal_flush, pqcomm.c:1108
....
2010-05-22 15:35:10 ART LOG:  00000: aborting any active transactions


With the following code

mDbConnector.setAutoCommit(false);
// Get the Large Object Manager to perform operations with
LargeObjectManager lobj = ((org.postgresql.PGConnection)mDbConnector).getLargeObjectAPI();

// Create a new large object
int oid = lobj.create(LargeObjectManager.READ | LargeObjectManager.WRITE);

// Open the large object for writing
LargeObject obj = lobj.open(oid, LargeObjectManager.WRITE);
byte []data = cont.getData();

obj.write(data,0,data.length);
obj.close();
PreparedStatement statement = mDbConnector.prepareStatement("INSERT INTO publicitiescontent (IdPublicities,MimeType,FileName,Title,Data) VALUES (?,?,?,?,?)");
statement.setBigDecimal(1, new BigDecimal(publicityId));
statement.setString(2, cont.getMimeType());
statement.setString(3, cont.getFileName());
statement.setString(4, cont.getNombre());
statement.setInt(5, oid);
statement.execute();
statement.close();
mDbConnector.commit();


Any ideas or bug detected in the connector with this problem?

Thanks in advance,
Hernan

Re: Error in connector or driver with big bytea

От
Craig Ringer
Дата:
On 23/05/10 03:03, Hernan Danielan wrote:
> Hello! I have a problem for several days now. I am trying to insert a
> record with a file of 1.4MB in a postgre database with a JDBC connector.
> When i insert files around 100KB it works great. However it does not
> work with greater ones. I use both method bytea and oid but both of them
> give me the same error in the database log:
>
>
> 2010-05-22 15:30:44 ART LOCATION:  exec_bind_message, postgres.c:1769
> 2010-05-22 15:30:44 ART LOG:  08006: could not send data to client:
> Connection reset by peer
> 2010-05-22 15:30:44 ART LOCATION:  internal_flush, pqcomm.c:1108
> .....
> 2010-05-22 15:30:45 ART LOCATION:  exec_execute_message, postgres.c:1988
> 2010-05-22 15:30:46 ART LOG:  08006: could not send data to client:
> Broken pipe
> 2010-05-22 15:30:46 ART LOCATION:  internal_flush, pqcomm.c:1108
> ....
> 2010-05-22 15:35:10 ART LOG:  00000: aborting any active transactions
>
>
> With the following code

Can you supply a *fully* stand-alone test case? And make sure it still
encounters the problem on your server?

Also, in your test case, when the JDBC driver throws, don't catch the
exception. Let it propagate out to terminate the program so that the JRE
prints detailed exception info on all nested exceptions.

--
Craig Ringer

Re: Error in connector or driver with big bytea

От
Lew
Дата:
On 05/22/2010 03:03 PM, Hernan Danielan wrote:
> Hello! I have a problem for several days now. I am trying to insert a
> record with a file of 1.4MB in a postgre database with a JDBC connector.

A "Postgres" database.

--
Lew