SAVEPOINT
Точка сохранения внутри транзакции. Позволяет откатиться к ней, не отменяя всю транзакцию.
SAVEPOINT point_name; ROLLBACK TO point_name; RELEASE SAVEPOINT point_name;
Объяснение
Пример
BEGIN;
INSERT INTO orders (user_id, total) VALUES (1, 500);
SAVEPOINT after_order;
INSERT INTO payments (order_id, amount) VALUES (currval('orders_id_seq'), 500);
-- Если ошибка в платеже:
ROLLBACK TO after_order;
-- Заказ сохранён, платёж откачен
COMMIT;Связанные термины
Анекдоты по теме
— Что такое Hot Standby? — Replica, которая принимает SELECT запросы пока реплицирует. — Можно писать на реплику? — Нет. Только чтение. — Зачем? — Снять нагрузку чтения с primary: аналитика, отчёты, бэкапы. — А данные всегда свежие? — С небольшой задержкой (lag). Мониторь pg_stat_replication.
— Что такое streaming replication? — Primary отправляет WAL поток на replica в реальном времени. — Синхронно или асинхронно? — По умолчанию асинхронно: primary не ждёт подтверждения от replica. — Риск? — При падении primary несколько транзакций могут не дойти до replica. — Синхронный режим? — synchronous_commit = on — ждёт подтверждения. Безопаснее, но медленнее.
— Папа, а что такое транзакция? — Это когда ты говоришь маме «Я мою посуду», начинаешь мыть, но если она входит на кухню — делаешь ROLLBACK и говоришь «Я ещё не начинал».