Te explico lo que entendí en este momento.
Cuando creas un usuario, esta información se almacena realmente en la tabla pg_authid. pg_user es solo una vista a esta tabla. Y postgresql por dentro solo pone unos asteriscos a este campo. Por lo que la vista pg_user no te servirá para autenticar usuarios.
Acabo de leer en la documentación de postgresql (cerré la ventana y ahora no la encuentro

) que la forma como almacena los password al crear usuarios es 'contraseñausuario' en md5. Por ejemplo: para el usuario user_daniel con contraseña password_daniel, el almacenamiento se hace md5('userdanielpassworddaniel').
Sabiendo esto... hice una prueba creando un usuario:
Código SQL:
Ver originalCREATE USER danielito WITH PASSWORD 'danielito';
reviso la tabla pg_authid
Código SQL:
Ver originalpostgres=> SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
-------------+-------------------------------------
postgres | md5f8190ea2a42cea0c1ebde86b5291b2fe
creft_admin | md550e1c958f80fa60ccf9dd6b975d7f85c
danielito | md5e4b43e3f991f4d922f78a0fbb3d74052
(3 filas)
Fijate que el campo password todos empiezan por md5.
hago esta prueba
Código SQL:
Ver originalpostgres=> SELECT MD5('danielito');
md5
----------------------------------
f3e399a7288dc9c4dd6ab228d0e30c77
(1 fila)
Nada que ver con el password.
Según el apartado donde mencionan la forma que postgresql almacena las contraseñas hago está prueba:
Código SQL:
Ver originalpostgres=> SELECT MD5('danielitodanielito');
md5
----------------------------------
e4b43e3f991f4d922f78a0fbb3d74052
(1 fila)
Está si me da el password real.
Solo le hace falta la palabra md5 al principio.
Hacemos está consulta:
Código SQL:
Ver originalpostgres=> SELECT rolname,rolpassword
FROM pg_authid WHERE rolpassword = 'md5' || MD5('danielitodanielito');
rolname | rolpassword
-----------+-------------------------------------
danielito | md5e4b43e3f991f4d922f78a0fbb3d74052
(1 fila)
Y funciona.
En pocas palabras y después de tanta chachara..
Para solucionar tu problema, la cosa sería:
Código PHP:
Ver originalpg_query("SELECT rolname FROM pg_authid WHERE rolname='usuario1' AND rolpassword = 'md5' || md5('mipaswordusuario1')");
esto es según el ejemplo que pones.
Gracias a tu pregunta aprendí algo nuevo hoy.
saludos