Hi, On 2023-02-17 12:36:05 -0800, Jeff Davis wrote: > > > There's already a check that the new cluster is empty, so I think > > > it's > > > safe to hack the pg_database locale fields. > > > > I don't think we need to, we do issue the CREATE DATABASEs. So we > > just need to > > make sure that includes the collation provider info, and the proper > > template > > database, in pg_upgrade mode. > > We must fixup template1/postgres in the new cluster (change it to libc > to match the old cluster), because any objects existing in those > databases in the old cluster may depend on the default collation. I > don't see how we can do that without updating pg_database, so I'm not > following your point.
I think we just drop/recreate template1 and postgres during pg_upgrade. Yep, looks like it. See create_new_objects(): /* * template1 database will already exist in the target installation, * so tell pg_restore to drop and recreate it; otherwise we would fail * to propagate its database-level properties. */ create_opts = "--clean --create"; and then: /* * postgres database will already exist in the target installation, so * tell pg_restore to drop and recreate it; otherwise we would fail to * propagate its database-level properties. */ if (strcmp(old_db->db_name, "postgres") == 0) create_opts = "--clean --create"; else create_opts = "--create"; Greetings, Andres Freund