Sobes.tech
Back to questions
Junior — Middle
60

Использовал ли ты в практике механизмы вложенных транзакций в PostgreSQL?

Answer from AI

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()

Таким образом, можно частично откатывать операции внутри транзакции, что имитирует вложенные транзакции.