/* new_relfilenode will match old and new pg_class.oid */
    map->new_relfilenode = new_rel->relfilenode;
 
+   if (strcmp(old_rel->nspname, new_rel->nspname) != 0 ||
+       strcmp(old_rel->relname, new_rel->relname) != 0)
+       pg_log(PG_FATAL, "mismatch of relation id: database \"%s\", old rel %s.%s, new rel %s.%s\n",
+           old_db, old_rel->nspname, old_rel->relname,
+           new_rel->nspname, new_rel->relname);
+
    /* used only for logging and error reporing, old/new are identical */
    snprintf(map->nspname, sizeof(map->nspname), "%s", old_rel->nspname);
    snprintf(map->relname, sizeof(map->relname), "%s", old_rel->relname);
 {
    int         dbnum;
 
+   if (cluster->dbarr)
+       free_db_and_rel_infos(cluster->dbarr);
+
    get_db_infos(cluster);
 
    for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
 
    check_ok();
 
    /* regenerate now that we have objects in the databases */
-   free_db_and_rel_infos(&new_cluster.dbarr);
    get_db_and_rel_infos(&new_cluster);
 
    uninstall_support_functions_from_new_cluster();
 
        pageCnvCtx *pageConverter = NULL;
 
        if (strcmp(old_db->db_name, new_db->db_name) != 0)
-           pg_log(PG_FATAL, "old and new databases have a different names: old \"%s\", new \"%s\"\n",
+           pg_log(PG_FATAL, "old and new databases have different names: old \"%s\", new \"%s\"\n",
                old_db->db_name, new_db->db_name);
        
        n_maps = 0;