De documentación :
y
Eso significa que su dblink
la llamada está usando dblink_connect
implícitamente. Use dblink_connect_u
en su lugar o cambie su método de autenticación a, p. md5.
Tenga en cuenta que también necesita otorgar privilegios de ejecución a caixa
rol, por ejemplo por:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Ejemplo de trabajo (después de GRANT
):
meta=> SELECT dblink_connect_u('conn1', 'dbname=op');
meta=> SELECT * FROM dblink('conn1','SELECT op_col from op_table')
AS t(op_col varchar);
op_col
--------
aaa
bbb
ccc
(3 rows)
meta=> SELECT dblink_disconnect('conn1');
EDITAR:
Lo siento por la respuesta un poco engañosa. Por supuesto que no necesita dblink_connect_u
para conexión autenticada md5. Hay una posibilidad que veo. PostgreSQL tiene dos diferentes tipos de conexión:host y locales .
Corriendo:
psql -h localhost ..
incorpora conexión host, pero
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
usa local tipo, por lo que si tiene un método sin contraseña para la conexión local (por ejemplo, método de identificación o confianza), entonces regresa
ERROR: password is required
DETAIL: Non-superuser cannot connect if the server does not request a password.
HINT: Target server's authentication method must be changed.
Comprobar
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
para anfitrión conexión. Para mayor claridad, si es posible, publique su pg_hba.conf
.
También verifiqué qué pasa con CONNECT
privilegio en vchitta_op
DB, pero el mensaje de error es diferente:
REVOKE CONNECT ON DATABASE vchitta_op FROM PUBLIC;
REVOKE CONNECT ON DATABASE vchitta_op FROM caixa;
SELECT dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
ERROR: could not establish connection
DETAIL: FATAL: permission denied for database "vchitta_op"
DETAIL: User does not have CONNECT privilege.