2012-03-23 19 views
12

Estoy intentando eliminar una función 'xyz' que anteriormente era la propietaria del esquema con el mismo nombre 'xyz'. Modifiqué la propiedad del esquema de la siguiente manera y ejecuté la propiedad reasignada por las dudas (aunque todas las tablas fueron creadas por un usuario diferente con poder de superusuario). Así que corro todas estas cosas:Falló la función drop de PostgreSQL debido a los privilegios predeterminados

alter schema xyz owner to postgres; 
reassign owned by xyz to postgres; 
alter default privileges in schema seeds revoke all on tables from xyz cascade; 
alter default privileges in schema seeds revoke all on sequences from xyz cascade; 
alter default privileges in schema seeds revoke all on functions from xyz cascade; 

Y sigue recibiendo el error:

drop role xyz; 
ERROR: role "xyz" cannot be dropped because some objects depend on it 
DETAIL: owner of default privileges on new relations belonging to role xyz in schema xyz 

también FYI:

postgres=# \du rsi 
List of roles 
Role name | Attributes | Member of 
-----------+----------------+----------- 
rsi  | No inheritance | {} 

¿Qué me falta? ¡Cualquier ayuda sería apreciada! ¡¡Gracias!!

+0

Mover esto a dba.stackexchange.com? –

Respuesta

13

Tomado del PostgreSQL documentation en ALTER DEFAULT PRIVILEGES, la sección de Notas:

If you wish to drop a role for which the default privileges have been altered, it is necessary to reverse the changes in its default privileges or use DROP OWNED BY to get rid of the default privileges entry for the role.

Otra worthy mention de la documentación relativa a DROP OWNED BY en este caso es también que

Because DROP OWNED only affects the objects in the current database, it is usually necessary to execute this command in each database that contains objects owned by a role that is to be removed.

Por lo tanto, su experiencia puede variar, lo que significa que es posible que deba emitir la declaración en más DB.

Al haber recibido los mismos mensajes que se mencionaron en la pregunta, probé la declaración DROP OWNED BY y funcionó. ¡Espero que esto ayude!

+5

'DROP OWNED BY usr;' seguido de 'DROP USER usr;' trabajado para mí, gracias! – cvsguimaraes

Cuestiones relacionadas