Согласно комментариям в источнике , truncate
создает новый пустой файл хранилища и удаляет старый файл хранилища во время фиксации. (Документы предполагают, что «файл хранилища» - это просто файл, если говорить об ОС, но я могу неправильно понимать терминологию.)
Создайте новый пустой файл хранилища для отношения и назначьте его в качестве значения relfilenode. Старый файл хранилища планируется удалить при фиксации.
Поскольку кажется, что он удаляет файл, я могу представить некоторые случаи, когда базовая операционная система не сразу освобождает это пространство. Я полагаю, что в некоторых случаях файл хранилища может оказаться, например, в Корзине под Windows. Но в моем случае усечение таблицы в PostgreSQL 9. что-то сразу увеличило свободное пространство под Windows.
Усечение также записывается в журнал WAL. Я не знаю, какой эффект это может оказать.