Из документации :
Только суперпользователи могут использовать dblink_connect для создания
соединения без аутентификации по паролю. Если это не суперпользователи
возможность, используйте dblink_connect_u вместо.
и
dblink_connect_u () идентична dblink_connect (), за исключением того, что
позволит не суперпользователям подключаться любым методом аутентификации.
Это означает, что ваш 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');
EDIT:
Извините за слегка вводящий в заблуждение ответ. Конечно, вам не нужно dblink_connect_u
для аутентификации md5
подключение. Я вижу одну возможность. PostgreSQL имеет два разных типа подключения: хост и локальный .
Продолжительность:
psql -h localhost ..
включает соединение с хостом, но
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
использует тип local , поэтому, если у вас есть метод без пароля для локального соединения (например, метод идентификатора или доверие), он возвращает
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
БД, но сообщение об ошибке другое:
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.