Sobes.tech
Middle+
40

PostgreSQL-де DELETE пен TRUNCATE арасындағы айырмашылық қандай? DELETE-ті транзакциясыз қайтаруға бола ма?

Сұралған компаниялар
Росэлторг

AI-дан жауап

sobes.tech AI

В PostgreSQL:

  • DELETE удаляет строки из таблицы по условию, при этом каждая удалённая строка фиксируется в журнале транзакций (WAL), что позволяет откатить операцию в рамках транзакции. DELETE может быть медленнее при большом объёме данных.

  • TRUNCATE быстро удаляет все строки из таблицы, фактически сбрасывая её содержимое. Это DDL-операция, которая не сканирует строки и не генерирует отдельные записи для каждой удалённой строки, поэтому работает быстрее. TRUNCATE нельзя откатить, если он выполнен вне транзакции, и он сбрасывает счётчики идентификаторов.

Можно ли откатить DELETE без транзакции? Нет. В PostgreSQL все изменения данных, включая DELETE, происходят в рамках транзакции. Если вы не начали транзакцию явно, то каждая команда выполняется в собственной транзакции (autocommit). После выполнения DELETE без явной транзакции откат невозможен, так как транзакция уже зафиксирована.