Thread: change the value of "unix_socket_directories" , must used "-h /xx/xx" to use the Unix domain socket

Hi all,
     I change the value of "unix_socket_directories" in postgresql.conf ,  then restart the database, but it cannot connect the database used like this 
"psql -d postgres -p 5432" ,  it must given the parameter " -h /xx/xx" to use the Unix domain socket。
    how to fix   this issue ?

the test steps as below :
[wln@localhost postgres9.3]$ cat data/postgresql.conf | grep unix_socket_directories
unix_socket_directories = '/tmp/wln'    # comma-separated list of directories

[wln@localhost postgres9.3]$ psql -d postgres -p 5432
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"?
[wln@localhost postgres9.3]$ psql -d postgres -p 5432 -h /tmp/wln
psql (9.3beta2)
Type "help" for help.

postgres=# \q
[wln@localhost postgres9.3]$ 

    Thanks,
     waln






On 8/16/2014 8:41 AM, lin wrote:
> I change the value of "unix_socket_directories" in postgresql.conf ,
> then restart the database, but it cannot connect the database used
> like this
> "psql -d postgres -p 5432" , it must given the parameter " -h /xx/xx"
> to use the Unix domain socket。
> how to fix this issue ?

the client has no access to postgresql.conf, it has no idea you changed
it. the default value is baked into libpq.so at compile time.



--
john r pierce                                      37N 122W
somewhere on the middle of the left coast



Le 16 août 2014 17:44, "lin" <jluwln@163.com> a écrit :
>
> Hi all,
>      I change the value of "unix_socket_directories" in postgresql.conf ,  then restart the database, but it cannot connect the database used like this 
> "psql -d postgres -p 5432" ,  it must given the parameter " -h /xx/xx" to use the Unix domain socket。
>     how to fix   this issue ?
>

That ain't an issue. The client, psql here, can't know where the server put the socket if it isn't in the default location.

> the test steps as below :
> [wln@localhost postgres9.3]$ cat data/postgresql.conf | grep unix_socket_directories
> unix_socket_directories = '/tmp/wln'    # comma-separated list of directories
>
> [wln@localhost postgres9.3]$ psql -d postgres -p 5432
> 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"?
> [wln@localhost postgres9.3]$ psql -d postgres -p 5432 -h /tmp/wln
> psql (9.3beta2)
> Type "help" for help.
>
> postgres=# \q
> [wln@localhost postgres9.3]$ 
>
>     Thanks,
>      waln
>
>
>
>
>
>

On Aug 16, 2014, at 8:49 AM, John R Pierce <pierce@hogranch.com> wrote:

> On 8/16/2014 8:41 AM, lin wrote:
>> I change the value of "unix_socket_directories" in postgresql.conf , then restart the database, but it cannot
connectthe database used like this 
>> "psql -d postgres -p 5432" , it must given the parameter " -h /xx/xx" to use the Unix domain socket。
>> how to fix this issue ?
>
> the client has no access to postgresql.conf, it has no idea you changed it. the default value is baked into libpq.so
atcompile time. 

You might find the environment variable PGHOST useful.

Cheers,
  Steve




On August 16, 2014 11:41:02 AM EDT, lin <jluwln@163.com> wrote:
>Hi all,
>I change the value of "unix_socket_directories" in postgresql.conf ,
>then restart the database, but it cannot connect the database used like
>this
>"psql -d postgres -p 5432" ,  it must given the parameter " -h /xx/xx"
>to use the Unix domain socket。
>    how to fix   this issue ?

 I'll start by saying that your test case is very clear, and thank you for it. I am unsure what your goal is, however.
Iassume you are trying to set up parallel postgres processes, for debugging. I've done this recently, for that reason. 

First thing to point out is that you need only one of -h and -p.  They are redundant options, because you only connect
topostgres either over TCP (-p) or with a unix domain socket (-h). 

Second, what you're seeing is necessary. If you change the default, then psql doesn't know where to look. However, you
canrecover the old behaviour with shell tricks: 
$ alias psql='psql -h /xx/xx'
$ psql -d postgres

(Personally, I wrote a short wrapper script called "client.sh" which depth-first searches for a postgres db directory
andthe runs 'psql -h' with the first one it finds; equally well you could have this script install an alias) 

Are you perhaps confused about what a unix domain socket is? Why are you changing it? This is a decent description of
it: 
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man4/unix.4


On 8/16/2014 9:01 AM, Nick Guenther wrote:
> First thing to point out is that you need only one of -h and -p.  They are redundant options, because you only
connectto postgres either over TCP (-p) or with a unix domain socket (-h). 

what??!?   no, this is totally wrong.

     psql -h myserver -p 5435

     psql -h /path/to/socket -p 5433

those are both valid.  if there is no hostname, OR the hostname starts
with /, then it uses a unix domain socket.





--
john r pierce                                      37N 122W
somewhere on the middle of the left coast



On Aug 16, 2014, at 9:01 AM, Nick Guenther <nguenthe@uwaterloo.ca> wrote:

>
>
> On August 16, 2014 11:41:02 AM EDT, lin <jluwln@163.com> wrote:
>> Hi all,
>> I change the value of "unix_socket_directories" in postgresql.conf ,
>> then restart the database, but it cannot connect the database used like
>> this
>> "psql -d postgres -p 5432" ,  it must given the parameter " -h /xx/xx"
>> to use the Unix domain socket。
>>   how to fix   this issue ?
>
> I'll start by saying that your test case is very clear, and thank you for it. I am unsure what your goal is, however.
Iassume you are trying to set up parallel postgres processes, for debugging. I've done this recently, for that reason. 
>
> First thing to point out is that you need only one of -h and -p.  They are redundant options, because you only
connectto postgres either over TCP (-p) or with a unix domain socket (-h). 

Not really. In the case of a TCP connection you need -h for the hostname and -p for the port. For a unix socket
connectionyou use -h to specify the directory the unix socket is in, and -p is used to generate the name of the socket
withinthat directory. If you omit one or both then the compiled-in defaults will be used, but it still uses both values
toconnect. 

>
> Second, what you're seeing is necessary. If you change the default, then psql doesn't know where to look. However,
youcan recover the old behaviour with shell tricks: 
> $ alias psql='psql -h /xx/xx'
> $ psql -d postgres

Setting environment variables to point to your preferred instance will also work - and it'll work with any client that
useslibpq (which is probably almost everything that's not java). 

Cheers,
  Steve

>
> (Personally, I wrote a short wrapper script called "client.sh" which depth-first searches for a postgres db directory
andthe runs 'psql -h' with the first one it finds; equally well you could have this script install an alias) 
>
> Are you perhaps confused about what a unix domain socket is? Why are you changing it? This is a decent description of
it: 
> http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man4/unix.4
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general



On 8/16/2014 9:16 AM, Steve Atkins wrote:
> Setting environment variables to point to your preferred instance will also work - and it'll work with any client
thatuses libpq (which is probably almost everything that's not java). 

java/jdbc doesn't support unix domain sockets anyways, so that's moot
for the OP's issue.


--
john r pierce                                      37N 122W
somewhere on the middle of the left coast



John R Pierce <pierce@hogranch.com> writes:
> On 8/16/2014 9:16 AM, Steve Atkins wrote:
>> Setting environment variables to point to your preferred instance will also work - and it'll work with any client
thatuses libpq (which is probably almost everything that's not java). 

> java/jdbc doesn't support unix domain sockets anyways, so that's moot
> for the OP's issue.

Another idea (which is also only for libpq-based apps) is to set up
a "service" file.

http://www.postgresql.org/docs/9.3/static/libpq-pgservice.html

            regards, tom lane