दस्तावेज़ीकरण से :
और
इसका मतलब है कि आपका dblink
कॉल dblink_connect
का उपयोग कर रहा है
परोक्ष रूप से। dblink_connect_u
का उपयोग करें
इसके बजाय या अपनी प्रामाणिक विधि को उदा। एमडी5.
ध्यान दें कि आपको 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
एमडी 5 प्रमाणित कनेक्शन के लिए। एक संभावना है जो मुझे दिखाई दे रही है। 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.