2015-12-03 22 views
6

Ho le seguenti utenti postgres cui posso visualizzare richiamando il comando \ du nel terminale come segue:Come goccia utente da Postgres Database

postgres=# \du 

          List of roles 
Role name |     Attributes     | Member of 
-----------+------------------------------------------------+----------- 
postgres | Superuser, Create role, Create DB, Replication | {} 
tutorial1 |            | {} 

Secondo il postgres documentation, dovrei essere in grado di cadere l'utente chiamato "tutorial1" immettendo il seguente comando:

postgres=# DROP USER tutorial1 

Tuttavia, quando uso il comando non succede nulla. La documentazione non fornisce alcun suggerimento sul motivo per cui questo non funziona, né fornisce esempi chiari.

Detto questo, qual è il comando per eliminare questo utente?

+4

'DROP ROLE tutorial1;' http://www.postgresql.org/docs/9.4/static/sql-droprole.html –

+3

Presumo che hai dimenticato il punto e virgola alla fine dell'istruzione ';' –

+3

Tutte le istruzioni devono termina con un ';' –

risposta

1

Il tuo comando è ok ma ti dimentichi di mettere ; alla fine del comando.

Prova come questo

postgres=# DROP USER tutorial1; (Note I put semicolon at the end) 
+0

Hai downvoted la tua risposta a causa di questo errore 'ERRORE: il ruolo" tutorial1 "non può essere eliminato perché alcuni oggetti dipendono da esso' – kabrice

1

Se vi trovate qui (come me), perché non si riesce a eliminare l'utente, il seguente modello può essere utile:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1; 
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1; 
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1; 
DROP USER tutorial1; 

L'utente può avere privilegi in altri schemi, nel qual caso sarà necessario eseguire la riga REVOKE appropriata con "public" sostituito dallo schema corretto. Per mostrare tutti gli schemi e tipi di privilegio per un utente, ho modificato il comando \ dp per fare questa domanda:

SELECT 
    n.nspname as "Schema", 
    CASE c.relkind 
    WHEN 'r' THEN 'table' 
    WHEN 'v' THEN 'view' 
    WHEN 'm' THEN 'materialized view' 
    WHEN 'S' THEN 'sequence' 
    WHEN 'f' THEN 'foreign table' 
    END as "Type" 
FROM pg_catalog.pg_class c 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%postgres%'; 

Non sono sicuro di quali tipi di privilegio corrispondono a revoca su tabelle, sequenze, o funzioni, ma penso che tutti loro cadano sotto uno dei tre.