Från dokumentation :
och
Det betyder att din dblink
samtalet använder dblink_connect
implicit. Använd dblink_connect_u
istället eller ändra din autentiseringsmetod till t.ex. md5.
Observera att du också behöver ge exekveringsbehörighet till caixa
roll, till exempel genom:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Arbetsexempel (efter 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');
EDIT:
Ursäkta för lite missvisande svar. Naturligtvis gör du inte behöver dblink_connect_u
för md5 autentiserad anslutning. Det finns en möjlighet som jag ser. PostgreSQL har två olika anslutningstyper:värd och lokala .
Kör:
psql -h localhost ..
innehåller värdanslutning, men
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
använder lokal typ, så om du har en icke-lösenordsmetod för lokal anslutning (till exempel ident-metod eller trust), så returnerar den
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.
Kontrollera
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
för värd förbindelse. För tydlighetens skull om möjligt vänligen posta din pg_hba.conf
.
Jag kollade också vad med CONNECT
privilegium på vchitta_op
DB, men felmeddelandet är annorlunda:
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.