通过使用事务和锁来确保数据库的一致性和可靠性。下面是一个示例代码:
// 假设已经建立了一个db
连接对象
const client = await db.connect()
try { // 创建一个事务并获取一个排他锁 await client.query('BEGIN;') await client.query('LOCK TABLE example_table IN EXCLUSIVE MODE;')
// 在锁范围内进行数据库操作 await client.query('INSERT INTO example_table (col1, col2) VALUES ($1, $2);', ['value1', 'value2']) await client.query('UPDATE example_table SET col1 = $1 WHERE col2 = $2;', ['new_value', 'value2']) const result = await client.query('SELECT * FROM example_table;')
// 提交事务 await client.query('COMMIT;')
// 处理查询结果或其他后续操作 console.log(result.rows) } catch (e) { // 回滚事务 await client.query('ROLLBACK;') console.error(e) } finally { // 释放连接 client.release() }
// 在上面的代码中,通过将所有数据库操作放在一个事务中,从而确保数据库的一致性和可靠性。同时,使用排他锁来防止其他并发访问。
// 另外,需要注意的是,使用锁可能会影响性能。因此,需要根据具体情况来权衡是否使用锁来解决并发访问问题。