Deadlock (взаимная блокировка)
Ситуация, когда две транзакции ждут блокировок друг друга и не могут продолжить.
-- Защита от дедлоков: одинаковый порядок блокировок SELECT * FROM ... WHERE id IN (...) ORDER BY id FOR UPDATE;
Объяснение
Пример
-- Безопасная очередь задач SELECT * FROM tasks WHERE status = 'pending' ORDER BY created_at LIMIT 1 FOR UPDATE SKIP LOCKED;
Связанные термины
Анекдоты по теме
MERGE (апдейт + инсерт) говорит таблице: — Я сейчас либо обновлю тебя, либо вставлю, смотря как повезёт. Таблица: — А если ты не попадаешь в условие? MERGE: — Тогда я просто упаду с ошибкой. Но ты же не захочешь меня откатывать? Это же долго.
— Что такое Hot Standby? — Replica, которая принимает SELECT запросы пока реплицирует. — Можно писать на реплику? — Нет. Только чтение. — Зачем? — Снять нагрузку чтения с primary: аналитика, отчёты, бэкапы. — А данные всегда свежие? — С небольшой задержкой (lag). Мониторь pg_stat_replication.
— Что такое two-phase commit? — Протокол для распределённых транзакций через несколько баз. — Фазы? — 1: все участники готовятся и говорят «готов». — 2: если все готовы — все фиксируют. Иначе — все откатывают. — Надёжно? — Да, но медленно. Один slow participant тормозит всех.