2023-04-21 13:01:45
Полезные запросы PostgreSQL (опустошение таблицы).Чтобы не быть героем мема, опубликованного в прошлое воскресенье, разберемся с командой TRUNCATE и чем она отличается от команды DROP TABLE.
TRUNCATE — удаляет данные из таблицы или из набора таблиц. Т.е. в отличии от DROP TABLE, после работы команды у нас останется пустая таблица с колонками. Команда работает очень быстро, так как при ее использовании не происходит сканирования всей таблицы. Ее можно эффективно использовать на таблицах большого размера. Эта команда хороша еще и тем, что немедленно высвобождает место на диске, т.е. после нее не нужно запускать команду VACUUM FULL.
Синтаксис команды такой:
TRUNCATE [ TABLE ] [ ONLY ] имя_таблицы [ * ]
[RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT ]
Команду можно использовать и так TRUNCATE имя_таблицы, и так TRANCATE TABLE имя_таблицы, результат будет один и тот же. Последняя команда сделана для совместимости со стандартом SQL.
ONLY - очищается только заданная таблица. Если ONLY не указать, то очиститься и заданная таблица и все ее потомки (если они есть);
RESTART IDENTITY - перезапустить последовательности таблицы. Т.е. если у таблицы есть какие-то автоматически увеличивающиеся данные (последовательности), то данный параметр обнуляет их и начинает отсчет с начала;
CONTINUE IDENTITY - не перезапускать последовательности таблицы. Это поведение по умолчанию;
CASCADE - автоматически очистит все таблицы, которые ссылаются по внешнему ключу на очищаемую таблицу. Использовать данный параметр надо с осторожностью, а то можно снести пол базы данных ;
RESTRICT - этот параметр противоположен предыдущему, т.е. запрещает очистку таблиц, ссылающихся по внешнему ключу на очищаемую таблицу. Это поведение по умолчанию.
Пример использования:
TRUNCATE [TABLE] table1, table2 RESTART IDENTITY;
#queries
182 views10:01