unix_domain_socket gesetzt psql schaut weiterhin in /tmp

Ich habe ein wenig an der Konfiguration meines PostgrSQL clusters herumgedreht und war mir eigentlich soweit sicher, dass das im Rahmen der Konfigurationsmöglichkeiten soweit passt.

Ich habe aber ein Problemchen im dem setting für unix_domain_socket

Der Pfad dafür wurde in der postgres.conf angepasst und der Server neu gestartet. --> unix_socket_directories = ‘<my_config_path>’
Der Server läuft auch soweit wie gewünscht

[root@<my_server> ~]# systemctl status postgresql-10.service
● postgresql-10.service - PostgreSQL 10 database server
   Loaded: loaded (/etc/systemd/system/postgresql-10.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-09-17 15:23:13 UTC; 1min 38s ago
     Docs: https://www.postgresql.org/docs/10/static/
 Main PID: 95305 (postmaster)
   CGroup: /system.slice/postgresql-10.service
           ├─95305 <my_binary_path>/postmaster -D <my_data_path> -c config_file=<my_config_path>/postgresql.conf
           ├─95310 postgres: logger process
           ├─95314 postgres: checkpointer process
           ├─95315 postgres: writer process
           ├─95316 postgres: wal writer process
           ├─95317 postgres: autovacuum launcher process
           ├─95318 postgres: stats collector process
           └─95319 postgres: bgworker: logical replication launcher

Sep 17 15:23:13 <my_server> systemd[1]: Starting PostgreSQL 10 database server...
Sep 17 15:23:13 <my_server> postmaster[95305]: 2018-09-17 15:23:13.925 UTC [95305] LOG:  listening on IPv4 address "0.0.0.0", port 5432
Sep 17 15:23:13 <my_server> postmaster[95305]: 2018-09-17 15:23:13.928 UTC [95305] LOG:  could not create IPv6 socket for address "::": Address family not supported by p
Sep 17 15:23:13 <my_server> postmaster[95305]: 2018-09-17 15:23:13.932 UTC [95305] LOG:  listening on Unix socket "<my_config_path>/.s.PGSQL.5432"
Sep 17 15:23:13 <my_server> postmaster[95305]: 2018-09-17 15:23:13.955 UTC [95305] LOG:  redirecting log output to logging collector process
Sep 17 15:23:13 <my_server> postmaster[95305]: 2018-09-17 15:23:13.955 UTC [95305] HINT:  Future log output will appear in directory "<my_log_path>".
Sep 17 15:23:13 <my_server> systemd[1]: Started PostgreSQL 10 database server.

Nun das Problemchen:
Ich kann mich zu dem System z.B. via pgAdmin4 von meinem Client Rechner aus verbinden, Querys absetzen durch den Cluster browsen etc. …
Nun wollte ich auf dem DB server mal wieder ein command via psql absetzen, dass meint aber das socket file in /tmp suchen zu müssen, obwohl ich es ja wie oben beschrieben in einem anderen Pfad abgelegt/konfiguriert habe.

[postgres@<my_server> ~]$ psql
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Hat eventuell jemand eine Idee, wo hier der Fehler liegt?
(es funktioniert im Übrigen wenn ich z.B. im das File postgresql.conf unix_socket_directories = ‘<my_config_path>,/tmp’ angebe, aber das war ja nicht der Zweck der Übung … pgAdmin bekommt es ja wie gesagt auch hin ohne socket-file unter /tmp)
Die Frage könnte auch lauten, warum sucht psql hartnäckig nach einem socket-file unter ‘/tmp’? :confused:

Danke und Gruß

psql kümmert sich nicht darum, was in der Config des Serverprozesses steht. Du kannst via export PGHOST setzen, oder den Pfad mittels -h beim Aufruf von psql definieren.

Danke.
Bin auch gerade nochmal fündig geworden, was das betriffft. Manchmal hilft es schon, wenn man das Problem aufscrhreibt. :rolleyes:

https://www.postgresql.org/docs/current/static/libpq-envars.html --> PGHOST
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNECT-HOST (da steh es dann auch nochmal drin, dass man sich damit zu einem bestimmten Unix-domain socket connecten kann)

Deine Variante mit dem -h oder --hostname=<hostanme/socket-path> ist hier beschrieben: https://www.postgresql.org/docs/10/static/app-psql.html

Gleich mal getestet und es funktioniert auch wie vorgesehen.
Da sich der Client hier auf der selben Maschine wie der Server befindet funktioniert als PGHOST= Umgebungsvariable:

  • <my_server>
  • localhost
  • <my_config_path/socket_path>

An sich finde ich das etwas verwirrend, den Parameter für einen Socketpfad zu verwenden (sprich die letzte Variante), aber da wird sich schon jemand etwas dabei gedacht haben.

naja, psql kann sich sowohl (lokal) via Socket als auch lokal & remote via TCP/IP-Stack verbinden. Aber - du hast ja nun die Lösung :wink: