Allow new relmapper entries when allow_system_table_mods is true.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 21 Mar 2012 18:09:39 +0000 (14:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 21 Mar 2012 18:09:39 +0000 (14:09 -0400)
This restores the pre-9.0 situation that it's possible to add new indexes
on pg_class and other mapped-but-not-shared catalogs, so long as you broke
the glass and flipped the big red Dont-Touch-Me switch.  As before, there
are a lot of gotchas, and you'd have to be pretty desperate to try this
on a production database; but there doesn't seem to be a reason for
relmapper.c to be preventing such things all by itself.  Per
experimentation with a case suggested by Cody Cutrer.

src/backend/utils/cache/relmapper.c

index 306832eb24b9bff4016f0c7d9e229db48029c095..6f214957bf831c4a5c17ebc630f5151adc860135 100644 (file)
@@ -837,8 +837,11 @@ perform_relmap_update(bool shared, const RelMapFile *updates)
    else
        memcpy(&newmap, &local_map, sizeof(RelMapFile));
 
-   /* Apply the updates to newmap.  No new mappings should appear. */
-   merge_map_updates(&newmap, updates, false);
+   /*
+    * Apply the updates to newmap.  No new mappings should appear, unless
+    * somebody is adding indexes to system catalogs.
+    */
+   merge_map_updates(&newmap, updates, allowSystemTableMods);
 
    /* Write out the updated map and do other necessary tasks */
    write_relmap_file(shared, &newmap, true, true, true,