Re: Psql meta-command conninfo+

From: Erik Wienhold <ewie(at)ewie(dot)name>
To: Maiquel Grassi <grassi(at)hotmail(dot)com(dot)br>
Cc: Nathan Bossart <nathandbossart(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Psql meta-command conninfo+
Date: 2024-02-07 09:54:21
Message-ID: 2quadime4klthrjwamiqmwqizfptoabi74dfjzzs3cjba4j6tp@lqzijrwi6i2o
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2024-02-07 09:55:48 Re: Why is subscription/t/031_column_list.pl failing so much?
Previous Message Peter Eisentraut 2024-02-07 09:53:36 Re: Built-in CTYPE provider