PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xử lý BatchUpdateException bằng withBatch

Tôi đã có thể giải quyết điều này với bài đăng được đề cập trong bình luận của Alexandros. Giải pháp bây giờ trông giống như sau:

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

Lưu ý rằng điều này được giải quyết bằng phương ngữ postgresql của SQL. Đối với các DBMS khác, có thể là một cách tiếp cận hữu ích để sử dụng thủ tục SQL trong phương thức withBatch-method.

Nếu ai đó biết cách thực hiện điều này với SQL chuẩn, vui lòng cho tôi một gợi ý.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giao dịch JDBC với đầu vào của người dùng

  2. thay thế cho chỉ mục bitmap trong postgresql

  3. PostgreSQL:Cách tối ưu hóa cơ sở dữ liệu của tôi để lưu trữ và truy vấn một biểu đồ khổng lồ

  4. Có thể tạo bảng với tên biến trong PostgreSQL không?

  5. Làm cách nào để viết một liên kết với tiêu chí kết hợp bất thường này?