PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

बैच के साथ बैचअपडेट अपवाद को संभालना

मैं इसे अलेक्जेंड्रोस टिप्पणी में उल्लिखित पोस्ट के साथ हल करने में सक्षम था। समाधान अब इस तरह दिखता है:

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

ध्यान रखें कि यह SQL की postgresql बोली के साथ हल किया गया है। अन्य DBMS के लिए 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. अपडेट लॉक और अनलॉक के लिए चयन कब करता है?

  2. पीजी-वादा सम्मिलित सहायक का उपयोग करके उपनाम के रूप में तालिका नाम में कैसे सम्मिलित करें?

  3. Postgres में अनुक्रम नामों की सूची कैसे प्राप्त करें?

  4. पोस्टग्रेस्क्ल में स्ट्रिंग अक्षर और एस्केप वर्ण

  5. PostgreSQL में दो तिथियों के बीच समय श्रृंखला उत्पन्न करना