PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Обработка на BatchUpdateException с помощта на withBatch

Успях да разреша това с публикацията, спомената в коментара на Александрос. Решението сега изглежда така:

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()
}

Имайте предвид, че това се решава с диалекта postgresql на SQL. За други СУБД може да е полезен подход да се използва SQL-процедура в withBatch-метода.

Ако някой знае начин да направи това със стандартен SQL, моля, дайте ми намек.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:таблица само за четене

  2. Postgresql json подобна заявка

  3. Избраната настройка LC_CTYPE изисква кодиране LATIN1

  4. Как мога да посоча MIME типа на heroku?

  5. PostgreSQL - Няма намерени релации.