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.

SQL
postgres=# \du

In diesem Beispiel wird der Benutzer test_user entfernt.

In der Auflistung sehen wir, dass dieser Benutzer tatsächlich vorhanden ist.

PostgreSQL - Benutzer-Rollen anzeigen.

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

PostgreSQL - Benutzer in PgAdmin4

Benutzer-Rolle entfernen

Um einen Benutzer bzw. eine Benutzer-Rolle zu entfernen, wird folgende Anweisung verwendet.

SQL
DROP ROLE myuser;

PostgreSQL - Benutzer in PgAdmin4

Alternativ kann man auch folgenden Befehl verwenden.

SQL
DROP USER myuser;

PostgreSQL - Benutzer in PgAdmin4

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

/ Weiter

Zurück zu Server-Administration

Zur Übersicht