Почему JOIN с блокировкой строки может вернуть пустоту в PostgreSQL
Строка есть, внешний ключ заполнен, но INNER JOIN ничего не возвращает. Это возможно, когда две транзакции одновременно меняют связанную запись.
В Read Committed PostgreSQL после снятия блокировки перепроверяет условие JOIN по новой версии строки, но связанную запись не загружает заново. Условие больше не совпадает: INNER JOIN отбрасывает строку, а LEFT JOIN вернёт пустые поля.
В подробном разборе автор воспроизводит гонку и проверяет способы защиты.
Post #14846
4.64K

- 🤯 13
- ❤ 6
- 👌 5
- 🤔 3
- 🎉 2
- 😭 2
- 😇 2
- ⚡ 1
- ☃ 1
- 🔥 1
- 🕊 1