TRUNCATE
Очищает таблицу от всех строк.
Greengage DB не применяет синтаксис ссылочной целостности (ограничения внешнего ключа). Команда TRUNCATE очищает таблицу, на которую ссылается ограничение внешнего ключа, даже если параметр CASCADE не указан.
Синтаксис
TRUNCATE [TABLE] [ONLY] <name> [ * ] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT]
Описание
Команда TRUNCATE быстро удаляет все строки из таблицы или набора таблиц. Она действует так же, как безусловная команда DELETE для каждой таблицы, но быстрее, поскольку она фактически не сканирует таблицы. Это может быть наиболее полезно для больших таблиц.
Для очистки строк таблицы необходимо иметь привилегию TRUNCATE.
Команда TRUNCATE устанавливает эксклюзивную блокировку доступа к таблице, которую она обрабатывает, блокируя все другие одновременные операции с таблицей. Если указан RESTART IDENTITY, то любые последовательности, которые должны быть перезапущены, также блокируются эксклюзивно. Если требуется обеспечить параллельный доступ к таблице, следует использовать команду DELETE.
Параметры
| Параметр | Описание |
|---|---|
name |
Имя (опционально указанное со схемой) таблицы, которую необходимо очистить. Если перед именем таблицы указано |
CASCADE |
Поскольку это ключевое слово применяется к ссылкам по внешним ключам (которые не поддерживаются в Greengage DB), оно не оказывает никакого эффекта |
RESTART IDENTITY |
Автоматически перезапускать последовательности, связанные со столбцами очищаемой таблицы |
CONTINUE IDENTITY |
Не изменять значения последовательностей. Это поведение по умолчанию |
RESTRICT |
Поскольку это ключевое слово применяется к ссылкам по внешним ключам (которые не поддерживаются в Greengage DB), оно не оказывает никакого эффекта |
Примечания
При выполнении 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 <table_name>. Выражения CONTINUE IDENTITY/RESTART IDENTITY также присутствуют в этом стандарте, но имеют несколько иное, хотя и связанное значение. Некоторые особенности параллельного выполнения этой команды определяются реализацией стандарта, поэтому приведенные выше замечания следует учитывать и при необходимости сравнивать с другими реализациями.