Re: How to restore a dump containing CASTs into a database with a new user? - Mailing list pgsql-general

From Christophe Pettus
Subject Re: How to restore a dump containing CASTs into a database with a new user?
Date
Msg-id 2FA23771-26EA-4BBE-8F54-E8B85C1D8945@thebuild.com
Whole thread Raw
In response to Re: How to restore a dump containing CASTs into a database with a new user?  (Thorsten Schöning <tschoening@am-soft.de>)
Responses Re: How to restore a dump containing CASTs into a database with a new user?
List pgsql-general

> On Jul 20, 2020, at 08:10, Thorsten Schöning <tschoening@am-soft.de> wrote:
> Make internal types used in CASTs owned by the restoring user, like
> all other objects are owned automatically as well.

I don't think that we want to do that, or that we even have to.

Having a restore tool make automatic changes to the ownership of objects in the database it is restoring into seems
likea bad idea, especially when those ownership changes are not part of the backup itself.  On a database with multiple
users,you can't just get away with changing the ownership of the types; you have to make sure that the USAGE is granted
appropriatelyto other users. 

Again, this is to support a very specific use-case:

* A database has user-defined objects in it that only a superuser can create, and,
* The rest of the database objects are owned by that superuser, and,
* You want to change the ownership of the database objects that can be changed, and,
* You want to have a single backup that you can restore multiple times, changing the ownership in a different way each
time,and, 
* You want to use pg_restore to do it.

This would require a fair amount of surgery to pg_restore.  Right now, pg_restore doesn't really have a "remap these
users"functionality.  --no-owner *looks* like it does that, and can be used for that in certain cases, but the
user-remappingfunctionality of it is really a side-effect.  It happens to change the user because instead of altering
theuser to what it is in the backup, it just accepts the default ownership based on the user it is connected as. 

You can accomplish the same thing by restoring as the superuser, not having to alter the ownership of any internal
type,and then changing the ownership of the user-created objects in the new database once it is restored.  This can be
doneentirely with existing tools, and doesn't need any changes to pg_restore, or even having to do ownership changes of
internaltypes (which I strongly suspect will bite you later). 

--
-- Christophe Pettus
   xof@thebuild.com




pgsql-general by date:

Previous
From: Michel Pelletier
Date:
Subject: Re: DB Authentication with Label Security
Next
From: Tom Lane
Date:
Subject: Re: Logical replication from 11.x to 12.x and "unique key violations"