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)
Source: R/transactions.R