fix for pg_upgrade - Mailing list pgsql-hackers

From Bruce Momjian
Subject fix for pg_upgrade
Date
Msg-id 201103060215.p262F5c10063@momjian.us
Whole thread Raw
Responses Re: fix for pg_upgrade
List pgsql-hackers
I got a report from someone using pg_upgrade coming from PG 8.3 ---
turns out we didn't rename toast tables to match the new relfilenode in
pre-8.4, so the attached applied patch avoids the check for these cases.
This check is new in pg_upgrade for 9.1.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
commit 9e5bed2df1693a46dfaed862d7462ba2379f8f79
Author: Bruce Momjian <bruce@momjian.us>
Date:   Sat Mar 5 21:12:21 2011 -0500

    Restructure pg_upgrade checks because pre-8.4 Postgres did not rename
    toast file names to match the new relfilenode.

diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c
index a502507..ad7edc4 100644
*** a/contrib/pg_upgrade/info.c
--- b/contrib/pg_upgrade/info.c
*************** gen_db_file_maps(DbInfo *old_db, DbInfo
*** 51,59 ****
          RelInfo    *new_rel = &new_db->rel_arr.rels[relnum];

          if (old_rel->reloid != new_rel->reloid)
!             pg_log(PG_FATAL, "mismatch of relation id: database \"%s\", old relid %d, new relid %d\n",
              old_db->db_name, old_rel->reloid, new_rel->reloid);
!
          create_rel_filename_map(old_pgdata, new_pgdata, old_db, new_db,
                  old_rel, new_rel, maps + num_maps);
          num_maps++;
--- 51,68 ----
          RelInfo    *new_rel = &new_db->rel_arr.rels[relnum];

          if (old_rel->reloid != new_rel->reloid)
!             pg_log(PG_FATAL, "Mismatch of relation id: database \"%s\", old relid %d, new relid %d\n",
              old_db->db_name, old_rel->reloid, new_rel->reloid);
!
!         /* toast names were not renamed to match their relfilenodes in pre-8.4 */
!         if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804 &&
!             (strcmp(old_rel->nspname, new_rel->nspname) != 0 ||
!              strcmp(old_rel->relname, new_rel->relname) != 0))
!             pg_log(PG_FATAL, "Mismatch of relation names: database \"%s\", "
!                 "old rel %s.%s, new rel %s.%s\n",
!                 old_db->db_name, old_rel->nspname, old_rel->relname,
!                 new_rel->nspname, new_rel->relname);
!
          create_rel_filename_map(old_pgdata, new_pgdata, old_db, new_db,
                  old_rel, new_rel, maps + num_maps);
          num_maps++;
*************** create_rel_filename_map(const char *old_
*** 104,115 ****
      /* 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->db_name, 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);
--- 113,118 ----

pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Parallel make problem with git master
Next
From: Josh Berkus
Date:
Subject: Re: Alpha4 release blockers (was Re: wrapping up this CommitFest)