Re: Psql meta-command conninfo+ - Mailing list pgsql-hackers

From Erik Wienhold
Subject Re: Psql meta-command conninfo+
Date
Msg-id 2quadime4klthrjwamiqmwqizfptoabi74dfjzzs3cjba4j6tp@lqzijrwi6i2o
Whole thread Raw
In response to RE: Psql meta-command conninfo+  (Maiquel Grassi <grassi@hotmail.com.br>)
Responses RE: Psql meta-command conninfo+
List pgsql-hackers
On 2024-02-07 05:13 +0100, Maiquel Grassi wrote:
>   On Tue, Feb 06, 2024 at 09:45:54PM +0000, Maiquel Grassi wrote:
>   > My initial idea has always been that they should continue to appear
>   > because \conninfo+ should show all the things that \conninfo shows and
>   > add more information. I think that's the purpose of the 'plus.' Now we're
>   > on a better path than the initial one. We can still add the socket
>   > directory and the host.
> 
>   Agreed.
> 
> --//--
> 
> I believe it's resolved reasonably well this way:
> 
> SELECT
>   pg_catalog.current_database() AS "Database",
>   current_user AS "User",
>   pg_catalog.current_setting('server_version') AS "Server Version",
>   CASE
>     WHEN pg_catalog.inet_server_addr() IS NULL
>     THEN 'NULL'
>     ELSE pg_catalog.inet_server_addr()::text
>   END AS "Server Address",

Should be NULL instead of string 'NULL'.  So the entire CASE expression
is redundant and you can just return pg_catalog.inet_server_addr().

>   pg_catalog.current_setting('port') AS "Port",
>   CASE
>     WHEN pg_catalog.inet_client_addr() IS NULL
>     THEN 'NULL'
>     ELSE pg_catalog.inet_client_addr()::text
>   END AS "Client Address",
>   CASE
>     WHEN pg_catalog.inet_client_port() IS NULL
>     THEN 'NULL'
>     ELSE pg_catalog.inet_client_port()::text
>   END AS "Client Port",

Same here.

>   pg_catalog.pg_backend_pid() AS "Session PID",
>   CASE
>     WHEN pg_catalog.current_setting('unix_socket_directories') = ''
>     THEN 'NULL'
>     ELSE pg_catalog.current_setting('unix_socket_directories')
>   END AS "Socket Directory",

The CASE expression can be simplified to:

    nullif(pg_catalog.current_setting('unix_socket_directories'), '')

>   CASE
>     WHEN
>       pg_catalog.inet_server_addr() IS NULL
>       AND pg_catalog.inet_client_addr() IS NULL
>     THEN 'NULL'
>     WHEN
>       pg_catalog.inet_server_addr() = pg_catalog.inet_client_addr()
>     THEN 'localhost'

Is it safe to assume localhost here?  \conninfo prints localhost only
when I connect with psql -hlocalhost:

    $ psql -hlocalhost postgres
    psql (16.1)
    postgres=# \conninfo
    You are connected to database "postgres" as user "ewie" on host "localhost" (address "::1") at port "5432".
    postgres=# \q

    $ psql -h127.0.0.1 postgres
    psql (16.1)
    postgres=# \conninfo
    You are connected to database "postgres" as user "ewie" on host "127.0.0.1" at port "5432".

>     ELSE pg_catalog.inet_server_addr()::text
>   END AS "Host";

-- 
Erik



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Built-in CTYPE provider
Next
From: Amit Kapila
Date:
Subject: Re: Why is subscription/t/031_column_list.pl failing so much?