Assert(PointerIsValid(stats));
 
    /*
-    * If this is an unlogged index, we need to write out an init fork for it.
-    */
-   if (heapRelation->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED)
+    * If this is an unlogged index, we may need to write out an init fork for
+    * it -- but we must first check whether one already exists.  If, for
+    * example, an unlogged relation is truncated in the transaction that
+    * created it, or truncated twice in a subsequent transaction, the
+    * relfilenode won't change, and nothing needs to be done here.
+    */
+   if (heapRelation->rd_rel->relpersistence == RELPERSISTENCE_UNLOGGED
+       && !smgrexists(indexRelation->rd_smgr, INIT_FORKNUM))
    {
        RegProcedure ambuildempty = indexRelation->rd_am->ambuildempty;