Re: Postgres Partitions not working with hibernate 4.1.6.Final - Mailing list pgsql-bugs
| From | Freddie Burgess |
|---|---|
| Subject | Re: Postgres Partitions not working with hibernate 4.1.6.Final |
| Date | |
| Msg-id | 001501cd9b65$866b6600$93423200$@radiantblue.com Whole thread Raw |
| In response to | Re: Postgres Partitions not working with hibernate 4.1.6.Final (Jaime Casanova <jaime@2ndquadrant.com>) |
| List | pgsql-bugs |
Hi Jaime,
We have our partitioning setup exactly like the instructions in
ddl-partitioning.html and prior to the upgrade to Hibernate 4.1.6 ingest =
was
working flawlessly as long as we set the
hibernate.jdbc.factory_class=3Dim.empl.core.service.ingest.postgres.Postg=
resPa
rtitionBatcherFactory in Hibernate. If we comment out this setting in =
our
old configuration using Hibernate 3.2.2.GA inserts into our partitioned
tables breaks as well.
I'm not sure how org.hibernate.jdbc.Batcher is affecting partition =
inserts.
I previously omitted the return call to the PostgresPartitionBatcher =
module
component to the batcher process.
package im.empl.cores.service.ingest.postgres;
import java.lang.reflect.Field;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.engine.jdbc.batch.spi.Batch;
import org.hibernate.engine.jdbc.batch.spi.BatchKey;
import org.hibernate.engine.jdbc.batch.spi.BatchObserver;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
public class PostgresPartitionBatcher implements Batch
=09
{
=09
private static Logger logger =3D
Logger.getLogger("PostgresPartitionBatcher");
=09
=09
protected void doExecuteBatch() {
try {
/*
* use reflection to access the private field of the
super class
* ugly but necessary
*/
Field field =3D
this.getClass().getSuperclass().getDeclaredField(
"batchSize");
field.setAccessible(true);
int batchSize =3D field.getInt(this);
if (batchSize !=3D 0) {
try {
// ps.executeBatch();
}
catch (RuntimeException re) {
throw re;
}
finally {
batchSize =3D 0;
field.setInt(
this,
batchSize);
}
}
}
catch (Exception e) {
logger.error("Batch execution failed.", e);
throw new HibernateException(
"Unable to execute batch.");
}
}
@Override
public void addObserver(BatchObserver arg0) {
// TODO Auto-generated method stub
=09
}
@Override
public void addToBatch() {
// TODO Auto-generated method stub
=09
}
@Override
public void execute() {
// TODO Auto-generated method stub
=09
}
@Override
public PreparedStatement getBatchStatement(String arg0, boolean
arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public BatchKey getKey() {
// TODO Auto-generated method stub
return null;
}
@Override
public void release() {
// TODO Auto-generated method stub
=09
}
}
-----Original Message-----
From: jcasanov@systemguards.com.ec [mailto:jcasanov@systemguards.com.ec] =
On
Behalf Of Jaime Casanova
Sent: Tuesday, September 25, 2012 4:50 PM
To: Freddie Burgess
Cc: pgsql-bugs@postgresql.org
Subject: Re: [BUGS] Postgres Partitions not working with hibernate
4.1.6.Final
On Tue, Sep 25, 2012 at 3:12 PM, Freddie Burgess =
<fburgess@radiantblue.com>
wrote:
>
> Does anyone know why the previous .jdbc.batcher logic managed the=20
> postgres partitioned inserts without any issues?
> Are there any other alternative that will allow us to insert into a=20
> Postgres partition table without making massive code changes?
don't know about hibernate or that strange way to insert into =
partitions.
the postgresql's way is to create triggers on parent table to route the
inserts into the partitions as described here:
http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html
> Would upgrading from 4.1.6.Final to Hibernate 4.1.7 in Linux, fix this =
> partitioning ingest problem?
>
don't know, but that certainly looks like a hibernate bug, not a =
postgresql
one
--=20
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitaci=F3n
pgsql-bugs by date: