PostgreSQL оператор TRUNCATE TABLE

В этом учебном пособии вы узнаете, как использовать оператор TRUNCATE TABLE в PostgreSQL с синтаксисом и примерами.

Описание

Оператор TRUNCATE TABLE используется для удаления (усечения) всех записей из таблицы или набора таблиц в PostgreSQL. Он выполняет ту же функцию, что и оператор DELETE, без оператора WHERE.
Предупреждение: Если вы усекаете таблицу, оператор TRUNCATE TABLE не может быть отменен, если он не находится в транзакции, которая не была зафиксирована.

Синтаксис

Синтаксис для оператора TRUNCATE TABLE в PostgreSQL:

TRUNCATE [TABLE] [ONLY] [schema_name.]table_name [*] [,...]
[ RESTART IDENTITY | CONTINUE IDENTITY ]
[ CASCADE | RESTRICT] ;

Параметры или аргументы

TABLE
Необязательный. Оператор truncate будет вести себя одинаково независимо от того, указали ли вы TABLE или нет.
ONLY
Необязательный. Если указано, только table_name будет усечено. Если не указано, table_name и все его дочерние таблицы будут усечены.
schema_name
Имя схемы, к которой принадлежит таблица.
table_name
Таблица, которую вы хотите усечь.
*
Необязательный. Если указано, table_name и все его дочерние таблицы будут усечены.
RESTART IDENTITY
Необязательный. Если указано, все последовательности в усеченных таблицах будут сброшены.
CONTINUE IDENTITY
Необязательный. Если указано, все последовательности в усеченных таблицах будут оставлены и не будут сброшены. Это поведение по умолчанию.
CASCADE
Необязательный. Если указано, все таблицы, имеющие ссылку внешнего ключа на table_name, также будут усечены.
RESTRICT
Необязательный. Если указано, все таблицы, имеющие ссылку внешнего ключа на table_name, не будут усечены, если они не были перечислены в операторе TRUNCATE TABLE. Это поведение по умолчанию.

Примечание

  • Прежде чем вы сможете усечь таблицу, вы должны иметь необходимые привилегии, такие как TRUNCATE.
  • Триггеры DELETE для таблицы не запускаются во время усечения.
  • Вы не можете усечь таблицу, на которую ссылается внешний ключ, если в команде TRUNCATE не перечислены все таблицы в отношении внешнего ключа.
  • Все хранилище для усеченных строк будет восстановлено без VACUUM.

Пример

В PostgreSQL усечение таблицы является быстрым способом удаления записей из таблицы, поскольку для этого не нужно сканировать таблицу. Усечение таблицы также намного проще, чем удаление таблицы и ее воссоздание.
Рассмотрим пример использования оператора TRUNCATE TABLE в PostgreSQL.
Например:

В этом примере будет усечена таблица с именем products и удалены все записи из этой таблицы.
Это было бы эквивалентно следующему оператору DELETE в PostgreSQL:

Оба этих оператора приведут к удалению всех данных из таблицы products, и поскольку ключевое слово ONLY было использовано в команде TRUNCATE, никакие таблицы-потомки не будут усечены. Всегда безопаснее указывать ключевое слово ONLY, чтобы случайно не усечь таблицы-потомки.

Несколько таблиц

Далее давайте посмотрим, как усечь несколько таблиц одновременно.
Например:

В этом примере будут усечены таблицы с именами products и inventory. Опять же, мы включили ключевое слово ONLY, чтобы никакие таблицы-потомки не усекались.

Сброс столбцов идентификаторов

По умолчанию, когда вы усекаете таблицу, столбцы идентификаторов продолжают нумерацию с того места, где она остановилась. Вы можете указать PostgreSQL автоматически сбрасывать все столбцы идентификаторов при усечении таблицы, включив опцию RESTART IDENTITY.
Например:

В этом примере столбцы идентификаторов в таблице inventory будут возвращены к своим начальным значениям. Это полезно, если у вас есть поле первичного ключа, которое вы хотите перезапустить с 1.