Da documentação :
e
Isso significa que seu
dblink
chamada está usando dblink_connect
implicitamente. Use dblink_connect_u
em vez disso ou altere seu método de autenticação para, por exemplo, md5. Observe que você também precisa conceder privilégio de execução para
caixa
papel, por exemplo:GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Exemplo de trabalho (depois 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:
Desculpe pela resposta um pouco enganosa. Claro que você não precisa de
dblink_connect_u
para conexão autenticada md5. Há uma possibilidade que eu vejo. PostgreSQL tem dois diferentes tipos de conexão:host e local . Corrida:
psql -h localhost ..
incorpora conexão de host, mas
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
usa local type, portanto, se você tiver um método sem senha para conexão local (por exemplo, método ident ou confiança), ele retornará
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.
Verificar
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
para anfitrião conexão. Para maior clareza, se possível, poste seu
pg_hba.conf
. Também verifiquei o que dizer de
CONNECT
privilégio em vchitta_op
DB, mas a mensagem de erro é 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.