Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Очистка всех строк в таблице.
TRUNCATE [TABLE] [ONLY] name [ * ] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT]
TRUNCATE быстро удаляет все строки из таблицы или набора таблиц. Эффект аналогичен выполнению неограниченной команды DELETE для каждой таблицы, но поскольку при этом таблица фактически не сканируется, команда выполняется быстрее. Наиболее полезна при работе с большими таблицами.
Для очистки строк таблицы необходимо иметь привилегию TRUNCATE на эту таблицу.
Команда TRUNCATE получает эксклюзивные блокировки доступа (ACCESS EXCLUSIVE) на таблицы, к которым применяется, что предотвращает все другие параллельные операции с этими таблицами. Если указан параметр RESTART IDENTITY, все последовательности, которые будут перезапущены, также будут заблокированы в эксклюзивном режиме. Если требуется одновременный доступ к таблице, следует использовать команду DELETE.
name
CASCADE
RESTART IDENTITY
CONTINUE IDENTITY
RESTRICT
TRUNCATE не запускает определённые пользователем триггеры ON DELETE, которые могут существовать в таблице.
TRUNCATE не очищает таблицы, унаследованные от указанной таблицы. Будет очищена только указанная таблица, а не её дочерние таблицы.
TRUNCATE не очищает подтаблицы секционированной таблицы. Если указана подтаблица секционированной таблицы, команда TRUNCATE не удалит строки из этой таблицы и её подтаблиц.
TRUNCATE не является безопасным с точки зрения MVCC. После очистки таблица будет выглядеть как пустая для параллельной транзакции, использующей снимок, сделанный до очистки.
Что касается данных в таблице, TRUNCATE является транзакционно безопасным: если транзакция не зафиксирована, очистка будет корректно отменена.
TRUNCATE получает блокировку ACCESS EXCLUSIVE на каждую затронутую таблицу, что блокирует все другие параллельные операции с этой таблицей. Если требуется одновременный доступ к таблице, следует использовать команду DELETE.
При указании RESTART IDENTITY неявные операции ALTER SEQUENCE RESTART также выполняются транзакционно; то есть, если транзакция не зафиксирована, они будут отменены. Это отличается от обычного поведения ALTER SEQUENCE RESTART. Обратите внимание, что если до отката транзакции были выполнены другие операции с перезапущенной последовательностью, влияние этих операций на последовательность будет отменено, но это не повлияет на значение currval(). То есть после отката транзакции currval() продолжит отражать последнее значение последовательности, полученное в откатываемой транзакции, даже если сама последовательность больше не соответствует этому значению. Это поведение аналогично обычному поведению currval() после сбоя транзакции.
Очистить таблицы films и distributors:
TRUNCATE films, distributors;
То же самое, и сбросить все связанные генераторы последовательностей:
TRUNCATE films, distributors RESTART IDENTITY;
SQL: Стандарт 2008 включает команду TRUNCATE с синтаксисом TRUNCATE TABLE tablename. Предложение CONTINUE IDENTITY/RESTART IDENTITY также присутствует в этом стандарте, однако, хотя оно имеет схожее значение, оно немного отличается. Некоторые аспекты параллельного поведения этой команды определяются реализацией стандарта, поэтому вышеуказанные замечания следует учитывать и сравнивать с другими реализациями при необходимости.