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:

Previous
From: Jaime Casanova
Date:
Subject: Re: Postgres Partitions not working with hibernate 4.1.6.Final
Next
From: Stefan Pröls
Date:
Subject: Re: BUG #7567: Sequences not properly replicated