Хешът на паролата на Postgres е много близо до това, което сте направили, просто трябва да бъде включено потребителското име, както следва:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, документите на postgres всъщност изобщо не документират този хеш формат и изглежда предполагат, че администраторите рядко ще се занимават директно с тези хешове :( Няма вградени методи за генериране на тези хешове, за които знам. Ако паролата е предоставена на ALTER USER
командата не отговаря на хеш формата на postgres, предполага, че паролата не е хеширана и се грижи за това вътрешно - според документите за ключовата дума ENCRYPTED на CREATE ROLE. (IMHO това е погрешно поведение, защото ако хешът зависи от потребителското име, това означава, че хешовете не могат да се копират и поставят между различни акаунти, прекъсват, когато акаунтът се преименува и (отгатвайки ентропийно) има само ~6 бита от ефективна сол).
Предупреждението в горната част на документацията на passlib за хеша вероятно може да бъде по-ясно. Имаше за цел да предупреди хората, които разглеждат документацията на passlib, че 1) този хеш е ужасно несигурен, 2) че не трябва да го приемат за използване в собствените си приложения и 3) че е подходящ само за целите на работа с потребителски акаунти на postgres, тъй като това е най-силният (и единствен) хеш формат, който Postgres поддържа за собствените си акаунти.
(Ако се опитвате да използвате postgres за хеширане на пароли за потребителските акаунти на вашето собствено приложение, аз силно подкрепям препоръката на Clodoaldo да използвате bcrypt чрез разширението pgcrypto).