Der Passwort-Hash von Postgres ist sehr ähnlich zu dem, was Sie getan haben, es muss nur der Benutzername wie folgt eingefügt werden:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, die Postgres-Dokumentation dokumentiert dieses Hash-Format überhaupt nicht wirklich und scheint davon auszugehen, dass Administratoren selten direkt mit diesen Hashes umgehen werden :( Soweit ich weiß, gibt es keine integrierten Methoden zum Generieren dieser Hashes. Wenn das Kennwort für die ALTER USER
Befehl nicht dem Postgres-Hash-Format entspricht, geht er davon aus, dass das Passwort nicht gehasht wurde, und kümmert sich intern darum - gemäß den Dokumenten für das ENCRYPTED-Schlüsselwort von CREATE ROLE. (IMHO ist dies ein fehlerhaftes Verhalten, denn wenn ein Hash vom Benutzernamen abhängt, bedeutet dies, dass Hashes nicht zwischen verschiedenen Konten kopiert und eingefügt werden können, beim Umbenennen des Kontos unterbrochen werden und (in Bezug auf die Entropie) nur ~ 6 Bits haben wirksames Salz).
Die Warnung am Anfang der Passlib-Dokumentation für den Hash könnte wahrscheinlich klarer sein. Es sollte Leute, die die Passlib-Dokumentation durchstöbern, warnen, dass 1) dieser Hash schrecklich unsicher ist, 2) dass sie ihn nicht für die Verwendung in ihren eigenen Anwendungen übernehmen sollten und 3) dass er nur für den Zweck geeignet ist, damit zu arbeiten Postgres-Benutzerkonten, da es das stärkste (und einzige) Hash-Format ist, das Postgres für seine eigenen Konten unterstützt.
(Wenn Sie versuchen, Postgres zum Hashen von Passwörtern für die Benutzerkonten Ihrer eigenen Anwendung zu verwenden, würde ich Clodoaldos Empfehlung, bcrypt über die pgcrypto-Erweiterung zu verwenden, nachdrücklich zustimmen).