Dari dokumentasi :
dan
Itu berarti dblink
Anda
panggilan menggunakan dblink_connect
secara implisit. Gunakan dblink_connect_u
sebagai gantinya atau ubah metode autentikasi Anda menjadi mis. md5.
Perhatikan bahwa Anda juga perlu memberikan hak istimewa eksekusi ke caixa
peran, misalnya dengan:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Contoh kerja (setelah 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:
Maaf untuk jawaban yang sedikit menyesatkan. Tentu saja Anda tidak perlu dblink_connect_u
untuk koneksi terotentikasi md5. Ada satu kemungkinan yang saya lihat. PostgreSQL memiliki dua yang berbeda jenis koneksi:host dan lokal .
Berjalan:
psql -h localhost ..
menggabungkan koneksi host, tetapi
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
menggunakan lokal ketik, jadi jika Anda memiliki metode non-sandi untuk koneksi lokal (misalnya metode ident atau kepercayaan), maka ia akan kembali
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.
Periksa
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
untuk host koneksi. Untuk kejelasan, jika memungkinkan, harap posting pg_hba.conf
Anda .
Saya juga memeriksa bagaimana dengan CONNECT
hak istimewa di vchitta_op
DB, tetapi pesan kesalahannya berbeda:
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.