Ты удаляешь одного пользователя, а внезапно зависает весь проект. Если ты работаешь в PostgreSQL, обычный внешний ключ может стать причиной жесткой блокировки.
⚙️ В чём подвох?
Многие уверены, что
FOREIGN KEY автоматически создаёт индекс на колонку связи. 🔹 В MySQL это действительно так.
🔹 А вот в PostgreSQL — нет. Индекс нужно создавать вручную.
📉 Что происходит при удалении
Когда ты удаляешь запись из родительской таблицы (например, юзера), базе нужно убедиться, что на него нет ссылок в дочерней таблице (например, в заказах).
🔸 Без индекса база делает Full Table Scan — перебирает каждую строку в заказах. Это как искать нужное предложение, читая всю книгу целиком.
🔸 На время этого долгого поиска дочерняя таблица блокируется. Очередь запросов растёт, пока база не сломается от перегрузки.
🚀 Решение
Просто добавь индекс на колонку, которая ссылается на другую таблицу:
CREATE INDEX idx_orders_user_id ON orders(user_id);
💡 Всегда вручную индексируй колонки с внешними ключами в PostgreSQL, чтобы связи работали безопасно и быстро.



