Обсуждение: Error in connector or driver with big bytea
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
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
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