PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Hibernate Insert Batch mit partitioniertem Postgresql

Sie können versuchen, einen benutzerdefinierten Batcher zu verwenden, indem Sie die Eigenschaft hibernate.jdbc.factory_class festlegen. Stellen Sie sicher, dass der Ruhezustand die Aktualisierungsanzahl von Stapelvorgängen nicht überprüft, um Ihr Problem zu beheben. Sie können dies erreichen, indem Sie Ihren benutzerdefinierten Batcher dazu bringen, die Klasse BatchingBatcher zu erweitern, und dann die Methode doExecuteBatch(...) so überschreiben, dass sie wie folgt aussieht:

    @Override
    protected void doExecuteBatch(PreparedStatement ps) throws SQLException, HibernateException {
        if ( batchSize == 0 ) {
            log.debug( "no batched statements to execute" );
        }
        else {
            if ( log.isDebugEnabled() ) {
                log.debug( "Executing batch size: " + batchSize );
            }

            try {
//              checkRowCounts( ps.executeBatch(), ps );
                ps.executeBatch();
            }
            catch (RuntimeException re) {
                log.error( "Exception executing batch: ", re );
                throw re;
            }
            finally {
                batchSize = 0;
            }

        }

    }

Beachten Sie, dass die neue Methode die Ergebnisse der Ausführung der vorbereiteten Anweisungen nicht überprüft. Denken Sie daran, dass diese Änderung den Ruhezustand auf unerwartete Weise beeinflussen kann (oder vielleicht auch nicht).