Từ tài liệu :
và
Điều đó có nghĩa là dblink
của bạn
cuộc gọi đang sử dụng dblink_connect
ngầm hiểu. Sử dụng dblink_connect_u
thay vào đó hoặc thay đổi phương thức auth của bạn thành v.d. md5.
Lưu ý rằng bạn cũng cần cấp đặc quyền thực thi cho caixa
vai trò, ví dụ:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Ví dụ làm việc (sau 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');
CHỈNH SỬA:
Xin lỗi vì câu trả lời hơi sai lầm. Tất nhiên bạn không cần dblink_connect_u
cho kết nối xác thực md5. Tôi thấy có một khả năng. PostgreSQL có hai khác nhau loại kết nối: máy chủ lưu trữ và địa phương .
Đang chạy:
psql -h localhost ..
kết hợp kết nối máy chủ, nhưng
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
sử dụng địa phương nhập, vì vậy nếu bạn có phương thức không phải mật khẩu cho kết nối cục bộ (ví dụ:phương thức nhận dạng hoặc độ tin cậy), thì nó sẽ trả về
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.
Kiểm tra
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
cho máy chủ lưu trữ sự liên quan. Để rõ ràng nếu có thể, vui lòng đăng pg_hba.conf
của bạn .
Tôi cũng đã kiểm tra những gì về CONNECT
đặc quyền trên vchitta_op
DB, nhưng thông báo lỗi khác:
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.