PostgreSQL Truncate - усечение данных в базе данных PostgreSQL
Оператор `TRUNCATE` в PostgreSQL используется для удаления всех строк из таблицы или нескольких таблиц. Он обычно выполняется быстрее, чем оператор `DELETE`, потому что он не сохраняет логи изменений, используемых для восстановления данных в случае отката транзакции.
Синтаксис оператора `TRUNCATE` выглядит следующим образом:
TRUNCATE TABLE table_name [, table_name2, ...]
[RESTART IDENTITY | CONTINUE IDENTITY] [CASCADE | RESTRICT];
Оператор `TRUNCATE` принимает список таблиц, разделенных запятыми. Он также содержит некоторые необязательные свойства:
- `RESTART IDENTITY`: перезапускает значение счетчика серийных колонок к начальному значению (обычно 1).
- `CONTINUE IDENTITY`: сохраняет текущее значение счетчика серийных колонок.
- `CASCADE`: удаляет все внешние ключи, указывающие на указанные таблицы.
- `RESTRICT`: не позволяет удалять таблицу, если есть внешние ключи, указывающие на нее.
Пример использования оператора `TRUNCATE`:
sql
TRUNCATE TABLE employees;
Этот пример удаляет все строки из таблицы "employees".
Для таблиц, имеющих внешние ключи, необходимо использовать опцию `CASCADE`, чтобы удалить записи из связанных таблиц. Например:
sql
TRUNCATE TABLE departments CASCADE;
Этот пример удаляет все строки из таблицы "departments" и все строки из связанных таблиц, таких как "employees" (если они имеют внешние ключи, указывающие на "departments").
Оператор `TRUNCATE` очищает таблицу, но не сбрасывает автоинкрементные значения и счетчики серийных колонок. Если вы хотите начать с нуля, необходимо использовать опцию `RESTART IDENTITY`, например:
sql
TRUNCATE TABLE my_table RESTART IDENTITY;
Этот пример удаляет все строки из таблицы "my_table" и сбрасывает значение серийного столбца к начальному значению.
Важно отметить, что оператор `TRUNCATE` не может быть отменен в транзакции с помощью оператора `ROLLBACK`. Если было случайное удаление данных или есть потребность в их восстановлении, необходимо создать резервную копию данных перед выполнением оператора `TRUNCATE`.