Aus der Dokumentation :
und
Das bedeutet Ihren dblink
Aufruf verwendet dblink_connect
implizit. Verwenden Sie dblink_connect_u
stattdessen oder ändern Sie Ihre Authentifizierungsmethode auf z. md5.
Beachten Sie, dass Sie caixa
auch die Ausführungsberechtigung erteilen müssen Rolle, zum Beispiel durch:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Arbeitsbeispiel (nach 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');
BEARBEITEN:
Sorry für die leicht irreführende Antwort. Natürlich nicht benötigen dblink_connect_u
für md5-authentifizierte Verbindung. Eine Möglichkeit sehe ich. PostgreSQL hat zwei verschiedene Verbindungstypen:Host und lokal .
Laufend:
psql -h localhost ..
beinhaltet Host-Verbindung, aber
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
verwendet lokal type, wenn Sie also eine Nicht-Passwort-Methode für die lokale Verbindung haben (z. B. Ident-Methode oder Trust), dann wird
zurückgegebenERROR: 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.
Prüfen
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
für Host Verbindung. Zur Verdeutlichung poste bitte wenn möglich deine pg_hba.conf
.
Ich habe auch nachgesehen, was mit CONNECT
ist Privileg auf vchitta_op
DB, aber Fehlermeldung ist anders:
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.