I am not sure about that "It creates a new empty table , followed by rename of the existing table to the new empty table and finally dropping of the old table."
You mean table is re-created with new oid? I don't think oid changes, but the file relnode on the disk changes. So let me rephrase it truncate does the following: 1 - create a new empty file on the disk. 2 - at commit time, map the table oid to the new empty file. 3 - drop the old file.