Thanks for the patch updates. A few comments so far from me :
+static void _selectTableAccessMethod(ArchiveHandle *AH, const char *tablespace); tablespace => tableam +_selectTableAccessMethod(ArchiveHandle *AH, const char *tableam) +{ + PQExpBuffer cmd = createPQExpBuffer(); createPQExpBuffer() should be moved after the below statement, so that it does not leak memory : if (have && strcmp(want, have) == 0) return; char *tableam; /* table access method, onlyt for TABLE tags */ Indentation is a bit misaligned. onlyt=> only @@ -2696,6 +2701,7 @@ ReadToc(ArchiveHandle *AH) te->tablespace = ReadStr(AH); te->owner = ReadStr(AH); + te->tableam = ReadStr(AH); Above, I am not sure about the this, but possibly we may require to have archive-version check like how it is done for tablespace : if (AH->version >= K_VERS_1_10) te->tablespace = ReadStr(AH); So how about bumping up the archive version and doing these checks ? Otherwise, if we run pg_restore using old version, we may read some junk into te->tableam, or possibly crash. As I said, I am not sure about this due to lack of clear understanding of archive versioning, but let me know if you indeed find this issue to be true.