Node-Postgres:将事务语句合并为一个以提高速度?
Node-Postgres: Merge transaction statements into one to improve speed?
我目前正在使用 node-postgres 向我的 PostgresDB INSERT 和 UPDATE 大量数据。 事务最长可达 15k 语句。
我正在使用 documentation 中概述的交易:
client.query('BEGIN', (err) => {
if (shouldAbort(err)) return
client.query('INSERT INTO users(name) VALUES() RETURNING id', ['brianc'], (err, res) => {
if (shouldAbort(err)) return
const insertPhotoText = 'INSERT INTO photos(user_id, photo_url) VALUES (, )'
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()
})
})
})
问题 然而,每个事务语句都是单独发送到数据库的,这在示例中是有意义的,但在我们的用例中,我们永远不需要获取一个前一个语句的结果。
因此,我很想将所有语句放在一个语句中并立即执行,以减少事务的总持续时间。
很想知道这是否会导致任何不良行为。谢谢!
自行解决。在语句中放置多个命令时,查询失败:
"Error: cannot insert multiple commands into a prepared statement"
我目前正在使用 node-postgres 向我的 PostgresDB INSERT 和 UPDATE 大量数据。 事务最长可达 15k 语句。
我正在使用 documentation 中概述的交易:
client.query('BEGIN', (err) => {
if (shouldAbort(err)) return
client.query('INSERT INTO users(name) VALUES() RETURNING id', ['brianc'], (err, res) => {
if (shouldAbort(err)) return
const insertPhotoText = 'INSERT INTO photos(user_id, photo_url) VALUES (, )'
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()
})
})
})
问题 然而,每个事务语句都是单独发送到数据库的,这在示例中是有意义的,但在我们的用例中,我们永远不需要获取一个前一个语句的结果。
因此,我很想将所有语句放在一个语句中并立即执行,以减少事务的总持续时间。
很想知道这是否会导致任何不良行为。谢谢!
自行解决。在语句中放置多个命令时,查询失败: "Error: cannot insert multiple commands into a prepared statement"