В настоящее время я использую node-postgres до INSERT и UPDATE много данных для моего PostgresDB. Транзакции могут содержать до 15 000 операторов.
Я использую транзакции, как указано в документации :
client.query('BEGIN', (err) => {
if (shouldAbort(err)) return
client.query('INSERT INTO users(name) VALUES($1) RETURNING id', ['brianc'], (err, res) => {
if (shouldAbort(err)) return
const insertPhotoText = 'INSERT INTO photos(user_id, photo_url) VALUES ($1, $2)'
const insertPhotoValues = [res.rows[0].id, 's3.bucket.foo']
client.query(insertPhotoText, insertPhotoValues, (err, res) => {
if (shouldAbort(err)) return
client.query('COMMIT', (err) => {
if (err) {
console.error('Error committing transaction', err.stack)
}
done()
})
})
})
Проблема , однако, заключается в том, что каждый оператор транзакции отправляется в БД индивидуально, что имеет смысл в примере, но в нашем случае использования нам никогда не понадобится получать результат из предыдущего оператора.
Поэтому у меня возникает соблазн собрать все операторы в одно и выполнить их одновременно, чтобы сократить общую продолжительность транзакции.
Было бы интересно узнать, может ли это вызвать нежелательное поведение. Спасибо!