PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Gestion de BatchUpdateException à l'aide de withBatch

J'ai pu résoudre ce problème avec le message mentionné dans le commentaire d'Alexandros. La solution ressemble maintenant à ceci :

sql.withTransaction {
    try {
        sql.withBatch(1000, 'insert into category (id, version, name, parent_id) ' +
        'select :id, :version, :name, :parent_id ' +
        'where not exists (select name, parent_id from category where name = :name and parent_id = :parent_id);') { stmt ->
            categoryInserts.each {
                try {
                    stmt.addBatch([id: it.id, version: 0, name: it.name, parent_id: it.parent?.id])
                } catch (SQLException e) {
                  log.error("Category ${it.name} with parent ${it.parent?.id} could not be inserted.")
                }
            }
        }
    } catch (BatchUpdateException e) {
        log.error("Categories could not be inserted.", e)
    }

    sql.commit()
}

Sachez que cela est résolu avec le dialecte postgresql de SQL. Pour d'autres SGBD, il peut être utile d'utiliser une procédure SQL dans la méthode withBatch.

Si quelqu'un connaît un moyen de le faire avec un SQL standard, merci de me donner un indice.