От документация :
и
Това означава, че вашият dblink
обаждането използва dblink_connect
имплицитно. Използвайте dblink_connect_u
вместо това или променете метода си за удостоверяване на напр. md5.
Обърнете внимание, че също трябва да предоставите привилегия за изпълнение на caixa
роля, например от:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Работещ пример (след 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');
РЕДАКТИРАНЕ:
Извинете за леко подвеждащия отговор. Разбира се, че не го правите трябва dblink_connect_u
за md5 удостоверена връзка. Има една възможност, която виждам. PostgreSQL има две различни типове връзки:хост иместен .
Работи:
psql -h localhost ..
включва хост връзка, но
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
използваместен тип, така че ако имате метод без парола за локална връзка (например идентификационен метод или доверие), тогава той се връща
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.
Проверка
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
за домакин Връзка. За яснота, ако е възможно, публикувайте своя pg_hba.conf
.
Също така проверих какво ще кажете за CONNECT
привилегия на vchitta_op
DB, но съобщението за грешка е различно:
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.