В этом учебном пособии вы узнаете, как использовать оператор TRUNCATE TABLE в PostgreSQL с синтаксисом и примерами.
Описание
Оператор TRUNCATE TABLE используется для удаления (усечения) всех записей из таблицы или набора таблиц в PostgreSQL. Он выполняет ту же функцию, что и оператор DELETE, без оператора WHERE.
Предупреждение: Если вы усекаете таблицу, оператор TRUNCATE TABLE не может быть отменен, если он не находится в транзакции, которая не была зафиксирована.
Синтаксис
Синтаксис для оператора TRUNCATE TABLE в PostgreSQL:
[ 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.
Например:
1 |
TRUNCATE ONLY products; |
В этом примере будет усечена таблица с именем products и удалены все записи из этой таблицы.
Это было бы эквивалентно следующему оператору DELETE в PostgreSQL:
1 |
DELETE FROM products; |
Оба этих оператора приведут к удалению всех данных из таблицы products, и поскольку ключевое слово ONLY было использовано в команде TRUNCATE, никакие таблицы-потомки не будут усечены. Всегда безопаснее указывать ключевое слово ONLY, чтобы случайно не усечь таблицы-потомки.
Несколько таблиц
Далее давайте посмотрим, как усечь несколько таблиц одновременно.
Например:
1 |
TRUNCATE ONLY products, inventory; |
В этом примере будут усечены таблицы с именами products и inventory. Опять же, мы включили ключевое слово ONLY, чтобы никакие таблицы-потомки не усекались.
Сброс столбцов идентификаторов
По умолчанию, когда вы усекаете таблицу, столбцы идентификаторов продолжают нумерацию с того места, где она остановилась. Вы можете указать PostgreSQL автоматически сбрасывать все столбцы идентификаторов при усечении таблицы, включив опцию RESTART IDENTITY.
Например:
1 2 |
TRUNCATE ONLY inventory RESTART IDENTITY; |
В этом примере столбцы идентификаторов в таблице inventory будут возвращены к своим начальным значениям. Это полезно, если у вас есть поле первичного ключа, которое вы хотите перезапустить с 1.