Назад к вопросам
Junior — Middle
61
Использовал ли ты в практике механизмы вложенных транзакций в PostgreSQL?
Ответ от нейросети
sobes.tech AI
В 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()
Таким образом, можно частично откатывать операции внутри транзакции, что имитирует вложенные транзакции.