Re: fix psql \conninfo & \connect when using hostaddr - Mailing list pgsql-hackers

From Dmitry Dolgov
Subject Re: fix psql \conninfo & \connect when using hostaddr
Date
Msg-id CA+q6zcVYt8E1-avnNoxaVORnGQGczPuZ_+8HaWoF_Cg43or0FA@mail.gmail.com
Whole thread Raw
In response to Re: fix psql \conninfo & \connect when using hostaddr  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: fix psql \conninfo & \connect when using hostaddr
List pgsql-hackers
> On Tue, Jun 11, 2019 at 6:46 AM Fabien COELHO <coelho@cri.ensmp.fr> wrote:
>
> > Given that it's an open item for PostgreSQL 12,
>
> I'm working on it, but slowly.

Sorry, didn't mean to hurry you :) In fact if you need a hand, I can prepare a
patch for those parts everyone can agree on.

> > Indeed, looks like 6e5f8d4 introduced a subtle behaviour change, when
> > hostaddr changes are not picked up for subsequent \connect's, and I
> > don't see any mentions of it in the documentation.
>
> ISTM that the documentation is kind of fuzzy enough to match both
> behaviors.

Yeah, right. Then maybe we can add `hostaddr` e.g. somewhere here:

    diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
    --- a/doc/src/sgml/ref/psql-ref.sgml
    +++ b/doc/src/sgml/ref/psql-ref.sgml
    @@ -898,7 +898,7 @@ testdb=>
             </para>

             <para>
    -        Where the command omits database name, user, host, or port, the new
    +        Where the command omits database name, user, host,
hostaddr, or port, the new
             connection can reuse values from the previous connection.
By default,
             values from the previous connection are reused except
when processing

to emphasize the reusing of hostaddr too, and then mention behaviour change in
the release notes or any other place that would be the appropriate for that?

> > Although I guess it can be avoided by `-reuse-previous=off`, probably it
> > makese sense to update the docs.
>
> Yep, that is one option. The other is to revert or alter the subtle
> change, but ISTM that it made sense in some use case, so I wanted some
> time to think about it and test.

Sure, no one argue that the behaviour should be changed, it's only about the
documentation part.

> On Mon, May 27, 2019 at 10:38 PM Noah Misch <noah@leadboat.com> wrote:
> +static void
> +getHostaddr(PGconn *conn, char *host_addr, int host_addr_len)
> +{
> +     struct sockaddr_storage *addr = &conn->raddr.addr;
> +
> +     if (conn->connhost[conn->whichhost].type == CHT_HOST_ADDRESS)
> +             strlcpy(host_addr, conn->connhost[conn->whichhost].hostaddr, host_addr_len);
>
> I recommend removing this branch; inet_net_ntop() would work fine in the
> CHT_HOST_ADDRESS case, and that has the advantage of putting the address in
> standard form.

After short experiments I also couldn't find the reason why CHT_HOST_ADDRESS is
treated specially.

> +PQhostaddr(const PGconn *conn)
> +{
> +     if (!conn)
> +             return NULL;
> +
> +     if (conn->connhost != NULL)
> +     {
> +             if (conn->connhost[conn->whichhost].hostaddr != NULL &&
> +                     conn->connhost[conn->whichhost].hostaddr[0] != '\0')
> +                     return conn->connhost[conn->whichhost].hostaddr;
> +
> +             if (conn->connip != NULL)
> +                     return conn->connip;
> +     }
> +
> +     return "";
> +}
>
> Similar to my comment on getHostaddr(), why ever use hostaddr?  connip should
> always be equivalent to hostaddr when hostaddr is set.  (connip may be NULL if
> a malloc failed, but if we really cared, we'd fail the connection attempt when
> that happens.  If connip differs in any other material way, I'd want the user
> to see connip.)

The same here. Couldn't find any situation so far when `hostaddr` would be
different from `connip`. Maybe it makes sense just to reverse these conditions
and return first `connip` if not NULL. Also this example:

> Currently, hostaddr in nonstandard form stays that way
> (trailing space, in this example):
>
> [nm@gust 8:1 2019-05-23T13:21:54 postgresql 0]$ psql -X "hostaddr='127.0.7.1 '" -c '\conninfo'
> You are connected to database "test" as user "nm" on host "127.0.7.1 " at port "5433".

was a bit confusing for me, since the value here comes from PQhost, not
PQhostaddr, but in the very same way via hostaddr. So I guess any changes
should be replicated there too.



pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: [PATCH] Implement uuid_version()
Next
From: Masahiko Sawada
Date:
Subject: Re: Temp table handling after anti-wraparound shutdown (Was: BUG #15840)