TRUNCATE

Очистка всех строк в таблице.

Синтаксис

TRUNCATE [TABLE] [ONLY] name [ * ] [, ...]
     [ RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT]

Описание

TRUNCATE быстро удаляет все строки из таблицы или набора таблиц. Эффект аналогичен выполнению неограниченной команды DELETE для каждой таблицы, но поскольку при этом таблица фактически не сканируется, команда выполняется быстрее. Наиболее полезна при работе с большими таблицами.

Для очистки строк таблицы необходимо иметь привилегию TRUNCATE на эту таблицу.

Команда TRUNCATE получает эксклюзивные блокировки доступа (ACCESS EXCLUSIVE) на таблицы, к которым применяется, что предотвращает все другие параллельные операции с этими таблицами. Если указан параметр RESTART IDENTITY, все последовательности, которые будут перезапущены, также будут заблокированы в эксклюзивном режиме. Если требуется одновременный доступ к таблице, следует использовать команду DELETE.

Параметры

name

  • Имя таблицы, которую необходимо очистить (может быть указано с именем схемы). Если перед именем таблицы указано ONLY, будет очищена только сама таблица. Если ONLY не указано, будут очищены таблица и все её подтаблицы (при наличии). (Опционально) Можно указать * после имени таблицы, чтобы явно обозначить включение подтаблиц.

CASCADE

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

RESTART IDENTITY

  • Автоматически перезапускает последовательности, принадлежащие столбцам в пустой таблице.

CONTINUE IDENTITY

  • Не изменяет значение последовательностей. Это значение по умолчанию.

RESTRICT

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

Примечания

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 также присутствует в этом стандарте, однако, хотя оно имеет схожее значение, оно немного отличается. Некоторые аспекты параллельного поведения этой команды определяются реализацией стандарта, поэтому вышеуказанные замечания следует учитывать и сравнивать с другими реализациями при необходимости.