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;
Связанные термины
Анекдоты по теме
— Что делать, если случайно запустил DELETE без WHERE? — Плакать. Если повезёт и была транзакция — сделать ROLLBACK. Если не повезло — доставать бэкап.
— Что такое DDL транзакции? — В PostgreSQL DDL операции (CREATE, ALTER, DROP) транзакционны. — То есть можно откатить DROP TABLE? — Да! BEGIN; DROP TABLE users; ROLLBACK; — таблица цела. — В MySQL? — DDL делает implicit COMMIT. Откатить нельзя. — Это важное отличие.
— Что такое freeze в PostgreSQL? — PostgreSQL использует 32-bit transaction ID (XID). После ~2 миллиардов транзакций — wraparound. — Что происходит? — Старые строки могут «исчезнуть». База уходит в read-only для безопасности. — VACUUM FREEZE? — Помечает строки как «вечные», освобождая XID пространство. — autovacuum следит за этим.