Database

db_transaction

Execute code within a database transaction

Wraps code execution in a database transaction with automatic commit on success and rollback on error. This ensures atomicity of multiple database operations.


Usage

db_transaction(conn, code)

Arguments

Argument Description
conn

Database connection

code

Expression or code block to execute within the transaction

Details

The function automatically:

  • Begins a transaction with DBI::dbBegin()
  • Executes the provided code
  • Commits the transaction on success with DBI::dbCommit()
  • Rolls back the transaction on error with DBI::dbRollback()

Transactions are essential for maintaining data integrity when performing multiple related operations. If any operation fails, all changes are rolled back.

Returns

The result of the code expression

Examples

conn <- db_connect("postgres")

# Basic transaction
db_transaction(conn, {
  DBI::dbExecute(conn, "INSERT INTO users (name, age) VALUES ('Alice', 30)")
  DBI::dbExecute(conn, "INSERT INTO users (name, age) VALUES ('Bob', 25)")
})

# Transaction with error handling - auto-rollback on error
tryCatch({
  db_transaction(conn, {
    DBI::dbExecute(conn, "INSERT INTO users (name) VALUES ('Alice')")
    stop("Something went wrong")  # This will trigger rollback
  })
}, error = function(e) {
  message("Transaction failed: ", e$message)
})
DBI::dbDisconnect(conn)