Обсуждение: BUG #12765: Postgresql ROLE dropped, but its not dropped from pg_roles

Поиск
Список
Период
Сортировка

BUG #12765: Postgresql ROLE dropped, but its not dropped from pg_roles

От
vivek.singh@rackspace.com
Дата:
The following bug has been logged on the website:

Bug reference:      12765
Logged by:          vivek singh
Email address:      vivek.singh@rackspace.com
PostgreSQL version: 9.3.5
Operating system:   CentOS release 6.5
Description:

Postgresql ROLE dropped, but its not dropped from pg_roles view. rolconfig
column of pg_roles still shows the dropped role for associated user.

Bug reproduction:
=================================
postgres=# CREATE ROLE role1;
CREATE ROLE
postgres=# CREATE USER user1;
CREATE ROLE
postgres=# ALTER ROLE user1 SET ROLE TO role1;
ALTER ROLE
postgres=# \du+
                                    List of roles
 Role name |                   Attributes                   | Member of |
Description
-----------+------------------------------------------------+-----------+-------------
 postgres  | Superuser, Create role, Create DB, Replication | {}        |
 role1     | Cannot login                                   | {}        |
 user1     |                                                | {}        |

postgres=# \x
Expanded display is on.
postgres=# SELECT * FROM pg_roles WHERE rolname ='user1';
-[ RECORD 1 ]--+-------------
rolname        | user1
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
rolcatupdate   | f
rolcanlogin    | t
rolreplication | f
rolconnlimit   | -1
rolpassword    | ********
rolvaliduntil  |
rolconfig      | {role=role1}
oid            | 24861

postgres=# DROP ROLE role1 ;
DROP ROLE
postgres=# \x
Expanded display is off.
postgres=# \du+
                                    List of roles
 Role name |                   Attributes                   | Member of |
Description
-----------+------------------------------------------------+-----------+-------------
 postgres  | Superuser, Create role, Create DB, Replication | {}        |
 user1     |                                                | {}        |

postgres=# \x
Expanded display is on.
postgres=# SELECT * FROM pg_roles WHERE rolname ='user1';
-[ RECORD 1 ]--+-------------
rolname        | user1
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
rolcatupdate   | f
rolcanlogin    | t
rolreplication | f
rolconnlimit   | -1
rolpassword    | ********
rolvaliduntil  |
rolconfig      | {role=role1}
oid            | 24861

postgres=# SELECT version();
-[ RECORD 1
]---------------------------------------------------------------------------------------------------------
version | PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc
(GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit

postgres=#

Re: BUG #12765: Postgresql ROLE dropped, but its not dropped from pg_roles

От
David G Johnston
Дата:
vivek.singh wrote
> postgres=# ALTER ROLE user1 SET ROLE TO role1;

This does not do what it is you think it does...

In this statement the word "role" following SET is interpreted as an
identifier, specifically a GUC/configuration-variable.  It is not the
command/keyword ROLE as it is in the first part (ALTER ROLE).

See:  http://www.postgresql.org/docs/9.4/static/sql-alterrole.html

Custom user variables are allowed to be created and this is what you
accomplished.

You likely meant to issue:

GRANT role1 TO user1;

David J.




--
View this message in context:
http://postgresql.nabble.com/BUG-12765-Postgresql-ROLE-dropped-but-its-not-dropped-from-pg-roles-tp5837714p5837720.html
Sent from the PostgreSQL - bugs mailing list archive at Nabble.com.