2016-06-23 12 views
1

Ich weiß nicht, was mit meinen Einstellungen falsch ist, aber wenn ich versuche, mitdblink verwendet nicht die .pgpass Datei

psql -h {db address} -U {username} -w {db name} 

Es funktioniert gut, mit einer Datenbank zu verbinden, so die .pgpass Datei OK. Aber wenn ich an die lokale DB verbinden, und versuchen Sie dies:

select dblink_connect_u('conName', 'hostaddr={address} port={port} dbname={dbName} user={userName} '); 

ich den Fehler:

ERROR: could not establish connection 
DETAIL: fe_sendauth: no password supplied 

Mit Kennwort in der Verbindungszeichenfolge, es funktioniert gut, aber ich möchte nicht, dass die Passwort, um von jedem sichtbar zu sein. Irgendeine Idee, warum macht dies das?

Postgres Version: 9.3

Edit: OS: Postgres auf meinem Computer läuft (win7) und auf dem Remote-Server zu (Ubuntu Server 14.04). In Windows ist die Datei pgpass.conf: Benutzer/Myuser/AppData/Roaming/postgres/pgpass.conf, auf Ubuntu: /var/lib/postgres/.pgpass Aber ich habe mit Ubuntu auf lokalen und Remote-Server versucht Auch mit dem gleichen .pgpass Speicherort, und der Postgres-Prozess wird als Postgres-Benutzer ausgeführt, aber das Ergebnis ist das gleiche.

.pgpass Dateiinhalt:

192.168.1.47:5432:*:remoteusername:remotepassword 192.168.1.46:5432:*:localusername:localpassword

Die beiden Datenbanken sind nicht auf der gleichen Maschine.

aktualisieren
Es scheint eine IP-Adresse auflösen Problem zu sein, denn wenn ich die dblink_conncet_u() mit 'hostaddr=ip_address_here' versuchen ist es nicht funktioniert. Aber wenn ich den Hostnamen in die Datei anstelle der IP-Adresse und in der Verbindungszeichenfolge verwende ich 'host=hostname_here' es funktioniert gut.

+0

Sie sind nicht der wesentlichen Einzelheiten zu nennen. Postgres-Version, OS, der Inhalt Ihrer .pgpass-Datei. Verbinden Sie sich mit demselben Db-Cluster auf demselben Port auf derselben Maschine? Usw. –

+0

@ErwinBrandstetter Sie haben Recht. Beitrag wurde aktualisiert. – notARealMVP

+0

Wo befindet sich der '.pgpass'? Auf dem Client-Computer (auf dem Sie SQL ausführen) oder auf dem Server (auf dem Postgres ausgeführt wird)? –

Antwort

1

Jetzt wird db_link() auf dem Backend-Server-Prozess als Benutzer postgres ausgeführt.

Ist Ihre Datei an der richtigen Stelle für Benutzer postgres auf dem Datenbankcomputer?

Wenn nicht, wie erwarten Sie, dass es gelesen wird?


Ich glaube, Sie etwas verpasst haben muss:

# ls -l /var/lib/postgresql/.pgpass 
-rw------- 1 root root 79 Jun 24 08:10 /var/lib/postgresql/.pgpass 

(meanwhile, in psql...) 
dblinklocal=# SELECT dblink_connect('conn1', 'hostaddr=127.0.0.1 port=5432 dbname=dblinkremote user=testuser'); 
ERROR: could not establish connection 
DETAIL: fe_sendauth: no password supplied 

# chown postgres:postgres .pgpass 
dblinklocal=# SELECT dblink_connect('conn1', 'hostaddr=127.0.0.1 port=5432 dbname=dblinkremote user=testuser'); 
dblink_connect 
---------------- 
OK 
(1 row) 
+0

Die.Die Datei pgpass befindet sich in der Datei/var/lib/postgres /, die das Home-Verzeichnis der Benutzer postgres ist. Und der Dateimodus ist auf 0600 eingestellt. Der Postgres-Prozess wird als Benutzer postgres auf beiden Computern ausgeführt. Und der Inhalt der beiden .pgpass-Datei ist identisch. – notARealMVP

+0

Ja, ich muss etwas verpasst haben, aber nicht das. '# ls -l /var/lib/postgresql/.pgpass -rw ------- 1 postgres postgres 163 Juni 24 09: 40/var/lib/postgresql/.pgpass' Es ist im Besitz von Postgres Benutzer und Gruppe, das Problem ist nicht da. – notARealMVP

Verwandte Themen