In dieser Anleitung wird gezeigt, wie man in PostgreSQL Benutzer ausgeben kann und wie man eine bestimmte Benutzer-Rolle (Benutzer) entfernt.
Benutzer anzeigen
Um zu prüfen, welche Benutzer-Rollen vorhanden sind, kann man dies mittels dem \du Befehl prüfen.
postgres=# \duIn diesem Beispiel wird der Benutzer test_user entfernt.
In der Auflistung sehen wir, dass dieser Benutzer tatsächlich vorhanden ist.

Alternativ kann man ein GUI-Tool wie PgAdmin4 verwenden, um sich die Rollen (oder auch Datenbanken) anzuzeigen.

Benutzer-Rolle entfernen
Um einen Benutzer bzw. eine Benutzer-Rolle zu entfernen, wird folgende Anweisung verwendet.
DROP ROLE myuser;
Alternativ kann man auch folgenden Befehl verwenden.
DROP USER myuser;
Häufige Stolperfallen
DROP ROLE schlägt fehl, wenn die Rolle Objekte besitzt.
Die Fehlermeldung lautet role "myuser" cannot be dropped because some objects depend on it. Postgres lässt eine Rolle nur löschen, wenn ihr keine Datenbankobjekte mehr gehören. Reihenfolge zum sauberen Aufräumen: erst REASSIGN OWNED BY myuser TO postgres;, dann DROP OWNED BY myuser;, dann DROP ROLE myuser;.
REASSIGN OWNED muss in jeder Datenbank ausgeführt werden.
REASSIGN OWNED und DROP OWNED wirken nur in der aktuell verbundenen Datenbank. Wenn die Rolle in mehreren Datenbanken Objekte besitzt, musst du dich der Reihe nach mit jeder verbinden und die Befehle dort wiederholen — sonst hängt der finale DROP ROLE weiterhin.
DROP USER ist exakt dasselbe wie DROP ROLE.
Postgres unterscheidet intern nicht zwischen “User” und “Role”. DROP USER ist ein Alias für DROP ROLE. Beide löschen die gesamte Rolle inklusive Login-Recht — es gibt keine Variante, die nur das Login-Recht entfernt. Dafür wäre ALTER ROLE myuser NOLOGIN; der richtige Befehl.
Aktive Sessions blockieren das Drop nicht direkt — aber Default-Privileges schon.
Offene Connections der zu löschenden Rolle verhindern den Drop nicht zwingend, doch ihre DEFAULT PRIVILEGES-Einträge tun es. DROP OWNED BY myuser; räumt diese mit auf. Falls aktive Verbindungen wirklich stören, beendest du sie über SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'myuser';.
\du+ zeigt mehr als \du.
\du listet Rollen mit ihren Attributen (Superuser, Create role, Create DB, Replication, …). \du+ zeigt zusätzlich die Spalte “Description”. Praktisch, wenn du Rollen über COMMENT ON ROLE dokumentierst, etwa um Zweck oder Owner-Team festzuhalten.
Weiterführende Ressourcen
Externe Quellen
- DROP ROLE – PostgreSQL Documentation
- DROP USER – PostgreSQL Documentation
- REASSIGN OWNED – PostgreSQL Documentation
- DROP OWNED – PostgreSQL Documentation
- Dropping Roles – PostgreSQL Documentation