В PostgreSQL нет полноценной поддержки вложенных транзакций, но есть механизм под названием savepoints (точки сохранения), который позволяет откатывать часть транзакции без отмены всей.
Что такое вложенные транзакции в PostgreSQL и зачем они нужны?
В PostgreSQL нет полноценной поддержки вложенных транзакций, но есть механизм под названием savepoints (точки сохранения), который позволяет откатывать часть транзакции без отмены всей.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В PostgreSQL нет полноценной поддержки вложенных транзакций, но есть механизм под названием savepoints (точки сохранения), который позволяет откатывать часть транзакции без отмены всей.
Пример использования savepoints в Python с psycopg2:
import psycopg2
conn = psycopg2.connect(...)
cur = conn.cursor()
try:
cur.execute("BEGIN")
# Основные операции
cur.execute("INSERT INTO table1 (col) VALUES ('value1')")
cur.execute("SAVEPOINT sp1") # Создаём точку сохранения
try:
cur.execute("INSERT INTO table2 (col) VALUES ('value2')")
# Если что-то пошло не так
# raise Exception("Ошибка")
except Exception:
cur.execute("ROLLBACK TO SAVEPOINT sp1") # Откат к точке сохранения
cur.execute("COMMIT")
except Exception:
conn.rollback()
finally:
cur.close()
conn.close()
Таким образом, можно частично откатывать операции внутри транзакции, что имитирует вложенные транзакции.