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


Reply via email to