В PostgreSQL:
Разница между DELETE и TRUNCATE в PostgreSQL? Можно ли откатить DELETE без транзакции?
В PostgreSQL:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В PostgreSQL:
- DELETE удаляет строки из таблицы по условию, при этом каждая удалённая строка фиксируется в журнале транзакций (WAL), что позволяет откатить операцию в рамках транзакции. DELETE может быть медленнее при большом объёме данных.
- TRUNCATE быстро удаляет все строки из таблицы, фактически сбрасывая её содержимое. Это DDL-операция, которая не сканирует строки и не генерирует отдельные записи для каждой удалённой строки, поэтому работает быстрее. TRUNCATE нельзя откатить, если он выполнен вне транзакции, и он сбрасывает счётчики идентификаторов.
Можно ли откатить DELETE без транзакции? Нет. В PostgreSQL все изменения данных, включая DELETE, происходят в рамках транзакции. Если вы не начали транзакцию явно, то каждая команда выполняется в собственной транзакции (autocommit). После выполнения DELETE без явной транзакции откат невозможен, так как транзакция уже зафиксирована.