ne 2. 11. 2025 v 18:23 odesílatel Laurenz Albe
<laurenz.albe@cybertec.at> napsal:
>
> On Wed, 2024-01-24 at 15:26 +0100, Daniel Gustafsson wrote:
> > > On 24 Jan 2024, at 15:23, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
> > >
> > > On Wed, 2024-01-24 at 11:08 +0100, gparc@free.fr wrote:
> > > > for this "ALTER DATABASE" form, it should be mentioned that after execution of the command,
> > > > the old database owner loses all his privileges on it (even connection) although it might
> > > > still owns schemas or objects (tables, index,...) inside it.
> > > >
> > > > Thanks in advance to add this important precision.
> > >
> > > How about this:
> > >
> > > diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml
> > > index 4044f0908f..44042f863c 100644
> > > --- a/doc/src/sgml/ddl.sgml
> > > +++ b/doc/src/sgml/ddl.sgml
> > > @@ -1891,6 +1891,8 @@ ALTER TABLE <replaceable>table_name</replaceable> OWNER TO <replaceable>new_owne
> > > Superusers can always do this; ordinary roles can only do it if they are
> > > both the current owner of the object (or inherit the privileges of the
> > > owning role) and able to <literal>SET ROLE</literal> to the new owning role.
> > > + All object privileges of the old owner are transferred to the new owner
> > > + along with the ownership.
> > > </para>
> >
> > Doesn't seem unreasonable to me, it won't make the docs harder to read and use
> > for experienced users while it may make them easier to follow for new users.
>
> Here is a patch for this change.
Did a quick test: during review
retro=# CREATE USER josef;
CREATE DATABASE testdb OWNER josef;
GRANT ALL ON DATABASE testdb TO josef;
CREATE ROLE
CREATE DATABASE
GRANT
retro=# \l testdb
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype
| ICU Locale | ICU Rules | Access privileges
--------+-------+----------+-----------------+-------------+-------------+------------+-----------+-------------------
testdb | josef | UTF8 | libc | cs_CZ.UTF-8 |
cs_CZ.UTF-8 | | | =Tc/josef +
| | | | |
| | | josef=CTc/josef
(1 row)
retro=# ALTER DATABASE testdb OWNER TO retro;
ALTER DATABASE
retro=# \l testdb
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype
| ICU Locale | ICU Rules | Access privileges
--------+-------+----------+-----------------+-------------+-------------+------------+-----------+-------------------
testdb | retro | UTF8 | libc | cs_CZ.UTF-8 |
cs_CZ.UTF-8 | | | =Tc/retro +
| | | | |
| | | retro=CTc/retro
(1 row)
It works exactly as described in this patch. +1
> Yours,
> Laurenz Albe