De acordo com os comentários na fonte , truncate
cria um novo arquivo de armazenamento vazio e exclui o antigo arquivo de armazenamento no momento da confirmação. (Os documentos sugerem "arquivo de armazenamento" é apenas um arquivo no que diz respeito ao sistema operacional, mas talvez eu esteja entendendo mal a terminologia.)
Crie um novo arquivo de armazenamento vazio para a relação e atribua-o como o valor relfilenode. O arquivo de armazenamento antigo está agendado para exclusão na confirmação.
Como parece estar excluindo um arquivo, posso imaginar alguns casos em que o sistema operacional subjacente pode não liberar imediatamente esse espaço. Eu imagino que, em alguns casos, o arquivo de armazenamento possa acabar na Lixeira no Windows, por exemplo. Mas, no meu caso, truncar uma tabela no PostgreSQL 9.algo aumentou imediatamente o espaço livre no Windows.
O truncamento também é registrado no log do WAL. Não sei quanto efeito isso pode ter.