RE: Psql meta-command conninfo+
>From a quick skim of the latest messages in this thread, it sounds like there are a couple of folks who think \conninfo (and consequently \conninfo+) should only report values from the libpq API. I think they would prefer server-side information to be provided via a system view or maybe an entirely new psql meta-command. IIUC a new system view would more-or-less just gather information from other system views and functions. A view would be nice because it could be used outside psql, but I'm not sure to what extent we are comfortable adding system views built on other system views. Something like \sessioninfo (as proposed by Sami) would look more similar to what you have in your latest patch, i.e., we'd teach psql about a complicated query for gathering all this disparate information. IMHO a good way to help move this forward is to try implementing it as a system view so that we can compare the two approaches. I've had luck in the past with implementing something a couple different ways to help drive consensus. --//-- Great Nathan, we can follow that path of the view. I leave it open for anyone in the thread who has been following from the beginning to start the development of the view. Even you, if you have the interest and time to do it. At this exact moment, I am involved in a "my baby born" project, so I am unable to stop to look into this. If someone wants to start, I would appreciate it. Regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
On Wed, May 29, 2024 at 12:37:21PM +, Maiquel Grassi wrote: > Is there someone willing to help me with this development and guide the > patch so that it can be committed one day? >From a quick skim of the latest messages in this thread, it sounds like there are a couple of folks who think \conninfo (and consequently \conninfo+) should only report values from the libpq API. I think they would prefer server-side information to be provided via a system view or maybe an entirely new psql meta-command. IIUC a new system view would more-or-less just gather information from other system views and functions. A view would be nice because it could be used outside psql, but I'm not sure to what extent we are comfortable adding system views built on other system views. Something like \sessioninfo (as proposed by Sami) would look more similar to what you have in your latest patch, i.e., we'd teach psql about a complicated query for gathering all this disparate information. IMHO a good way to help move this forward is to try implementing it as a system view so that we can compare the two approaches. I've had luck in the past with implementing something a couple different ways to help drive consensus. -- nathan
RE: Psql meta-command conninfo+
Hi, Is there someone willing to help me with this development and guide the patch so that it can be committed one day? Regards, Maiquel.
Re: Psql meta-command conninfo+
> The original \conninfo was designed to report values from the libpq API > about what libpq connected to. And the convention in psql is that "+" > provide more or less the same information but a bit more. So I think it > is wrong to make "\conninfo+" something fundamentally different than > "\conninfo". That is a fair argument. Looking at this a bit more, it looks like we can enhance the GSSAPI output of conninfo to get the fields that GSSAPI fields that conninfo+ was aiming for Right now it just shows: printf(_("GSSAPI-encrypted connection\n")); but we can use libpq to get the other GSSAPI attributes in the output. > And even more so if it contains information that isn't really > "connection information". For example, current_user() doesn't make > sense here, I think. > I mean, if you want to add a command \some_useful_status_information, we > can talk about that, but let's leave \conninfo to what it does. > But I think there are better ways to implement this kind of server-side > status, for example, with a system view. What about a \sessioninfo command that shows all the information for the current session, PID, app_name, current_user, session_user, system_user, client_address, client_port, etc. These will be the fields that we cannot gather if the connection is broken for whatever reason. The distinction here is \sessioninfo are the details after the connection is established and could possibly be changed during the connection. Regards, Sami
Re: Psql meta-command conninfo+
On 04.04.24 18:15, Maiquel Grassi wrote: Well, I can revert \conninfo to its original state and keep \conninfo+ as it is, perhaps removing the application name, as I believe everything else is important for a DBA/SysAdmin. Do you think we can proceed with the patch this way? I am open to ideas that make \conninfo not limited to just four or five basic pieces of information and easily bring everything else to the screen. The original \conninfo was designed to report values from the libpq API about what libpq connected to. And the convention in psql is that "+" provide more or less the same information but a bit more. So I think it is wrong to make "\conninfo+" something fundamentally different than "\conninfo". And even more so if it contains information that isn't really "connection information". For example, current_user() doesn't make sense here, I think. I mean, if you want to add a command \some_useful_status_information, we can talk about that, but let's leave \conninfo to what it does. But I think there are better ways to implement this kind of server-side status, for example, with a system view. One problem in this patch is that it has no tests. Any change in any of the involved functions or views will silently break this. (Note that plain \conninfo doesn't have this problem to this extent because it only relies on libpq function calls. Also, a system view would not have this problem.)
Re: Psql meta-command conninfo+
> The point about application_name is a valid one. I guess it's there > because it's commonly given from the client side rather than being set >server-side, even though it's still a GUC. Arguably we could remove it > from \conninfo+, and claim that nothing that shows up in \dconfig should > also appear in \conninfo+. Then users should get in the habit of using > both to obtain a full picture. This sounds to me a very good compromise > actually. Perhaps another reason to remove "application_name" is because the value can be modified after the connection is established. If that is also another good reason, the same can be said about "Current User" and "Session User" as those could be modified with SET commands. This way conninfo could be only for attributes that will not change during the lifetime of the connection. Also, I just realized that pg_stat_ssl and pg_stat_gssapi will both return 0 rows if there is a set role/set session authorization, this means \conninfo+ will return empty. postgres=> select current_user; current_user -- user1 (1 row) postgres=> select * from pg_stat_ssl ; pid | ssl | version | cipher| bits | client_dn | client_serial | issuer_dn ---+-+-+-+--+---+---+--- 27223 | t | TLSv1.2 | ECDHE-RSA-AES256-GCM-SHA384 | 256 | | | (1 row) postgres=> set role = user2; SET postgres=> select * from pg_stat_ssl ; pid | ssl | version | cipher | bits | client_dn | client_serial | issuer_dn -+-+-++--+---+---+--- (0 rows) postgres=> select current_user; current_user -- user2 (1 row) postgres=> reset role; RESET postgres=> select current_user; current_user -- user1 (1 row) postgres=> select * from pg_stat_ssl ; pid | ssl | version | cipher| bits | client_dn | client_serial | issuer_dn ---+-+-+-+--+---+---+--- 27223 | t | TLSv1.2 | ECDHE-RSA-AES256-GCM-SHA384 | 256 | | | (1 row) Regards, Sami
Re: Psql meta-command conninfo+
On 2024-Apr-04, Peter Eisentraut wrote: > But I don't really see the point of this. The information you are querying > is already available in various system views. This proposal is just a > shorthand for a collection of various random things some people like to see. > Like, by what reason is application name included as connection info? Why > not any other session settings? What about long-term maintenance: By what > logic should things be added to this? Usability is precisely the point. You could also claim that we don't need \dconfig, since you could get the same thing by querying pg_settings for non-default settings. But \dconfig is very handy. I expect \conninfo+ to be equally useful. We don't give up command history just on the grounds that you can obtain the same effect by retyping the command. I'm not sure to what extent is it useful to make a distinction between the values that the client knows from those that the server knows. If it is, then we can redefine \conninfo+ to use the client values. The point about application_name is a valid one. I guess it's there because it's commonly given from the client side rather than being set server-side, even though it's still a GUC. Arguably we could remove it from \conninfo+, and claim that nothing that shows up in \dconfig should also appear in \conninfo+. Then users should get in the habit of using both to obtain a full picture. This sounds to me a very good compromise actually. -- Álvaro HerreraBreisgau, Deutschland — https://www.EnterpriseDB.com/ Tom: There seems to be something broken here. Teodor: I'm in sackcloth and ashes... Fixed. http://postgr.es/m/482d1632.8010...@sigaev.ru
RE: Psql meta-command conninfo+
Hi! (v29) I left the command \conninfo in its original form. I removed the 'Application Name' column from the \conninfo+ command. Thanks, Maiquel Grassi. v29-0001-psql-meta-command-conninfo-plus.patch Description: v29-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
>> The existing \conninfo command gets its values from libpq APIs. You are >> changing all of this to make a server query, which is a totally >> different thing. If we wanted to take a change like this, I don't think >> it should be reusing the \conninfo command. FWIW, I agree with Peter's concern here, for a couple of reasons: * If \conninfo involves a server query, then it will fail outright if the server is in an aborted transaction, or if there's something wrong with the connection --- which seems like one of the primary cases where you'd wish to use \conninfo. * What if there's a discrepancy between what libpq thinks and what the server thinks? (This is hardly unlikely for, say, host names.) In the current situation you can use \conninfo to investigate the client-side parameters and then use a manual query to see what the server thinks. If we replace \conninfo with a server query then there is no way at all to verify libpq parameters from the psql command line. So I concur that \conninfo should continue to report on libpq values and nothing else. We can certainly talk about expanding it within that charter, if there's useful stuff it doesn't show now. But a command that retrieves settings from the server should be a distinct thing. ---//--- Well, I can revert \conninfo to its original state and keep \conninfo+ as it is, perhaps removing the application name, as I believe everything else is important for a DBA/SysAdmin. Do you think we can proceed with the patch this way? I am open to ideas that make \conninfo not limited to just four or five basic pieces of information and easily bring everything else to the screen. Regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
Maiquel Grassi writes: >> The existing \conninfo command gets its values from libpq APIs. You are >> changing all of this to make a server query, which is a totally >> different thing. If we wanted to take a change like this, I don't think >> it should be reusing the \conninfo command. FWIW, I agree with Peter's concern here, for a couple of reasons: * If \conninfo involves a server query, then it will fail outright if the server is in an aborted transaction, or if there's something wrong with the connection --- which seems like one of the primary cases where you'd wish to use \conninfo. * What if there's a discrepancy between what libpq thinks and what the server thinks? (This is hardly unlikely for, say, host names.) In the current situation you can use \conninfo to investigate the client-side parameters and then use a manual query to see what the server thinks. If we replace \conninfo with a server query then there is no way at all to verify libpq parameters from the psql command line. So I concur that \conninfo should continue to report on libpq values and nothing else. We can certainly talk about expanding it within that charter, if there's useful stuff it doesn't show now. But a command that retrieves settings from the server should be a distinct thing. regards, tom lane
RE: Psql meta-command conninfo+
The existing \conninfo command gets its values from libpq APIs. You are changing all of this to make a server query, which is a totally different thing. If we wanted to take a change like this, I don't think it should be reusing the \conninfo command. But I don't really see the point of this. The information you are querying is already available in various system views. This proposal is just a shorthand for a collection of various random things some people like to see. Like, by what reason is application name included as connection info? Why not any other session settings? What about long-term maintenance: By what logic should things be added to this? --//-- Hello Peter, thank you for your participation. No, "they are not random things that random people like to see", that's not true. Have you read the entire conversation from the beginning? We have already discussed it a bit and I have provided an explanation about the motivation to implement this expansion of the "\conninfo" command. The thing is, if you have really been or worked as a DBA on a daily basis, taking care of many databases and PostgreSQL clusters, something like this additional command is the shortcut that every DBA needs. The application name was a suggestion from a member. If you think it's not necessary, we can remove it. Furthermore, if you believe that the patch is not well implemented, you, being a PostgreSQL guru, tell me how I can improve the current patch and we move towards v29. I'm not in a hurry, I just want it to be implemented in the best possible shape. Best regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
The existing \conninfo command gets its values from libpq APIs. You are changing all of this to make a server query, which is a totally different thing. If we wanted to take a change like this, I don't think it should be reusing the \conninfo command. But I don't really see the point of this. The information you are querying is already available in various system views. This proposal is just a shorthand for a collection of various random things some people like to see. Like, by what reason is application name included as connection info? Why not any other session settings? What about long-term maintenance: By what logic should things be added to this?
RE: Psql meta-command conninfo+
Hi folks, (v28) I made a modification to a variable in the 'host' column in the archive 'describe.c'. Test: [postgres@localhost ~]$ /home/pgsql-17devel/bin/psql -x -p 5432 psql (17devel, server 15.6) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+- Database | postgres Authenticated User | postgres Socket Directory | /tmp Host | Server Port | 5432 Server Address | Client Address | Client Port | Backend PID | 26728 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | postgres=# \q [postgres@localhost ~]$ /home/pgsql-17devel/bin/psql -x -p 5000 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5000". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+- Database | postgres Authenticated User | postgres Socket Directory | /tmp Host | Server Port | 5000 Server Address | Client Address | Client Port | Backend PID | 26730 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | f Regards, Maiquel Grassi. v28-0001-psql-meta-command-conninfo-plus.patch Description: v28-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
Building the docs fail for v26. The error is: ref/psql-ref.sgml:1042: element member: validity error : Element term is not declared in member list of possible children ^ I am able to build up to v24 before the was replaced with I tested building with a modified structure as below; the is a that has a within it. Each field is a simple list member and the the name of the fields should be . \conninfo[+] Outputs a string displaying information about the current database connection. When + is appended, more details about the connection are displayed in table format: Database:The database name of the connection. Authenticated User:The authenticated database user of the connection. Current User:The user name of the current execution context; see the current_user() function in for more details. ---//--- Hi Sami! (v27) I made the adjustment in the documentation. Thank you for the time dedicated to this feature. Regards, Maiquel Grassi. v27-0001-psql-meta-command-conninfo-plus.patch Description: v27-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Building the docs fail for v26. The error is: ref/psql-ref.sgml:1042: element member: validity error : Element term is not declared in member list of possible children ^ I am able to build up to v24 before the was replaced with I tested building with a modified structure as below; the is a that has a within it. Each field is a simple list member and the the name of the fields should be . \conninfo[+] Outputs a string displaying information about the current database connection. When + is appended, more details about the connection are displayed in table format: Database:The database name of the connection. Authenticated User:The authenticated database user of the connection. Current User:The user name of the current execution context; see the current_user() function in for more details. Regards, Sami
RE: Psql meta-command conninfo+
Hello Sami, (v26) > Here is an example [1] where the session information functions are > referenced. > The public doc for this example is in [2]. > Something similar can be done here. For example: > The session user's name; see the session_user() > function in > for more details. I updated the patch. Thank you for this help. Regards, Maiquel Grassi. v26-0001-psql-meta-command-conninfo-plus.patch Description: v26-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
> Here I considered your suggestion (Sami and Álvaro's). However, I haven't yet > added the links for the functions system_user(), current_user(), and > session_user(). > 'm not sure how to do it. Any suggestion on how to create/add the link? Here is an example [1] where the session information functions are referenced. The public doc for this example is in [2]. Something similar can be done here. For example: The session user's name; see the session_user() function in for more details. [1] https://github.com/postgres/postgres/blob/master/doc/src/sgml/system-views.sgml#L1663-L1664 [2] https://www.postgresql.org/docs/16/view-pg-locks.html Regards, Sami
RE: Psql meta-command conninfo+
Amigos, boa tarde! (v25) >if (pset.version >= 14) > one thing; >else if (pset.version > 90500) > second thing; > else > third thing; > >This also appears where you add the GSSAPI columns; and it's also in the >final part where you append the FROM clause, though it looks a bit >different there. > >- You have three lines to output a semicolon at the end of the query >based on version number. Remove the first two, and just have a final >one where the semicolon is added unconditionally. Adjustment made. > - I don't think one for each item in the docs is reasonable. > There's too much vertical whitespace in the output. Maybe do this > instead: > >[...] >database connection. When + is appended, >more details about the connection are displayed in table >format: > > > > Database: The name of the current > database on this connection. > > > > Authenticated User: The authenticated > user at the time of psql connection with the server. > > > ... > Adjustment made. But I think it needs a review glance. > - This text is wrong to start with "Returns the": > > System User: Returns the authentication method and the identity (if > any) that the user presented during the authentication cycle before > they were assigned a database role. It is represented as > auth_method:identity or NULL if the user has not been authenticated. > > That minor point aside, I disagree with Sami about repeating the docs > for system_user() here. I would just say "The authentication data > provided for this connection; see the function system_user() for more > details." with a link to the appropriate section of the docs. Making > us edit this doc if we ever modify the behavior of the function is not > great. Here I considered your suggestion (Sami and Álvaro's). However, I haven't yet added the links for the functions system_user(), current_user(), and session_user(). I'm not sure how to do it. Any suggestion on how to create/add the link? Regards, Maiquel Grassi. v25-0001-psql-meta-command-conninfo-plus.patch Description: v25-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
Database: The database name of the connection. Authenticated User: The authenticated database user of the connection. Socket Directory: The Unix socket directory of the connection. NULL if host or hostaddr are specified. Host: The host name or address of the connection. NULL if a Unix socket is used. Server Port: The IP address of the connection. NULL if a Unix socket is used. Server Address: The IP address of the host name. NULL if a Unix socket is used. Client Address: The IP address of the client connected to this backend. NULL if a Unix socket is used. Client Port: The port of the client connected to this backend. NULL if a Unix socket is used. Backend PID: The process id of the backend for the connection. Application name: psql is the default for a psql connection unless otherwise specified in the configuration parameter. -//- Hi Sami, I considered your suggestions and Álvaro's suggestions Regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
> That minor point aside, I disagree with Sami about repeating the docs > for system_user() here. I would just say "The authentication data > provided for this connection; see the function system_user() for more > details." +1. FWIW; Up the thread [1], I did mention we should link to the functions page, but did not have a very strong opinion on that. I do like your suggestion and the same should be done for "Current User" and "Session User" as well. [1] https://www.postgresql.org/message-id/640B2586-EECF-44C0-B474-CA8510F8EAFC%40amazon.com Regards, Sami
Re: Psql meta-command conninfo+
Hello Yeah, that's what I meant about the translations, thanks. Two more comments, - You don't need a two-level conditional here if (pset.sversion >= 90500) { if (pset.sversion < 14) appendPQExpBuffer(, " ssl.ssl AS \"%s\",\n" " ssl.version AS \"%s\",\n" " ssl.cipher AS \"%s\",\n" " ssl.compression AS \"%s\",\n", _("SSL Connection"), _("SSL Protocol"), _("SSL Cipher"), _("SSL Compression")); if (pset.sversion >= 14) appendPQExpBuffer(, " ssl.ssl AS \"%s\",\n" " ssl.version AS \"%s\",\n" " ssl.cipher AS \"%s\",\n" " NULL AS \"%s\",\n", _("SSL Connection"), _("SSL Protocol"), _("SSL Cipher"), _("SSL Compression")); } else appendPQExpBuffer(, " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n", _("SSL Connection"), _("SSL Protocol"), _("SSL Cipher"), _("SSL Compression")); Instead you can just do something like if (pset.version >= 14) one thing; else if (pset.version > 90500) second thing; else third thing; This also appears where you add the GSSAPI columns; and it's also in the final part where you append the FROM clause, though it looks a bit different there. - You have three lines to output a semicolon at the end of the query based on version number. Remove the first two, and just have a final one where the semicolon is added unconditionally. - I don't think one for each item in the docs is reasonable. There's too much vertical whitespace in the output. Maybe do this instead: [...] database connection. When + is appended, more details about the connection are displayed in table format: Database: The name of the current database on this connection. Authenticated User: The authenticated user at the time of psql connection with the server. ... - This text is wrong to start with "Returns the": System User: Returns the authentication method and the identity (if any) that the user presented during the authentication cycle before they were assigned a database role. It is represented as auth_method:identity or NULL if the user has not been authenticated. That minor point aside, I disagree with Sami about repeating the docs for system_user() here. I would just say "The authentication data provided for this connection; see the function system_user() for more details." with a link to the appropriate section of the docs. Making us edit this doc if we ever modify the behavior of the function is not great. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "We're here to devour each other alive"(Hobbes)
RE: Psql meta-command conninfo+
Hi! (v24) > I meant those columns to be just examples, but this should be applied to > all the other columns in the output as well. Applied the translation to all columns. Regards, Maiquel Grassi. v24-0001-psql-meta-command-conninfo-plus.patch Description: v24-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
On 2024-Mar-31, Maiquel Grassi wrote: > Yes Álvaro, I have already appointed you as the patch reviewer. > It's true, even before publishing it on Commifest, you have > already provided good ideas and guidance. Thanks. > I adjusted the translation syntax for the SSL and GSSAPI columns. > After your validation, that is, an okay confirmation that it's fine, I'll > proceed with the others. I meant those columns to be just examples, but this should be applied to all the other columns in the output as well. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "No necesitamos banderas No reconocemos fronteras" (Jorge González)
Re: Psql meta-command conninfo+
>. However, > I didn't complete item 4. I'm not sure, but I believe that linking it to the > documentation > could confuse the user a bit. I chose to keep the descriptions as they were. > However, if > you have any ideas on how we could outline it, let me know and perhaps we can > implement it. That is fair, after spending some time thinking about this, it is better to make the documentation as crystal clear as possible. I do have some rewording suggestions for the following fields. Database: The database name of the connection. Authenticated User: The authenticated database user of the connection. Socket Directory: The Unix socket directory of the connection. NULL if host or hostaddr are specified. Host: The host name or address of the connection. NULL if a Unix socket is used. Server Port: The IP address of the connection. NULL if a Unix socket is used. Server Address: The IP address of the host name. NULL if a Unix socket is used. Client Address: The IP address of the client connected to this backend. NULL if a Unix socket is used. Client Port: The port of the client connected to this backend. NULL if a Unix socket is used. Backend PID: The process id of the backend for the connection. Application name: psql is the default for a psql connection unless otherwise specified in the configuration parameter. For System User, you should use the full definition here https://github.com/postgres/postgres/blob/master/doc/src/sgml/func.sgml#L24251-L24259. The current path is missing the full description. Regards, Sami
RE: Psql meta-command conninfo+
Note that, in the patch as posted, the column names are not translatable. In order to be translatable, the code needs to do something like appendPQExpBuffer(, " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n", _("SSL Connection"), _("SSL Protocol"), _("SSL Cipher"), _("SSL Compression")); instead of appendPQExpBuffer(, " NULL AS \"SSL Connection\",\n" " NULL AS \"SSL Protocol\",\n" " NULL AS \"SSL Cipher\",\n" " NULL AS \"SSL Compression\",\n"); Please list me as reviewer for this patch, as I provided significant guidance before it was even posted. -//- Hello! (v23) Yes Álvaro, I have already appointed you as the patch reviewer. It's true, even before publishing it on Commifest, you have already provided good ideas and guidance. I adjusted the translation syntax for the SSL and GSSAPI columns. After your validation, that is, an okay confirmation that it's fine, I'll proceed with the others. Test: [postgres@localhost bin]$ ./psql -x -p 5000 -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5000". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+-- Database | postgres Authenticated User | postgres Socket Directory | Host | 127.0.0.1 Server Port | 5000 Server Address | 127.0.0.1 Client Address | 127.0.0.1 Client Port | 52966 Backend PID | 1693 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | f Regards, Maiquel Grassi. v23-0001-psql-meta-command-conninfo-plus.patch Description: v23-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Hello, Note that, in the patch as posted, the column names are not translatable. In order to be translatable, the code needs to do something like appendPQExpBuffer(, " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n" " NULL AS \"%s\",\n", _("SSL Connection"), _("SSL Protocol"), _("SSL Cipher"), _("SSL Compression")); instead of appendPQExpBuffer(, " NULL AS \"SSL Connection\",\n" " NULL AS \"SSL Protocol\",\n" " NULL AS \"SSL Cipher\",\n" " NULL AS \"SSL Compression\",\n"); Please list me as reviewer for this patch, as I provided significant guidance before it was even posted. -- Álvaro HerreraBreisgau, Deutschland — https://www.EnterpriseDB.com/
RE: Psql meta-command conninfo+
> For the current patch, I have a few more comments. > 1/ The output should be reorganized to show the fields that are part of > “conninfo” first. > With regards to the documentation. I think it's a good idea that every field > has an > description. However, I have some comments: > 1/ For the description of the conninfo command, what about simplifying like > below? > "Outputs a string displaying information about the current database > connection. When + is appended, more details about the connection are > displayed in table format:" > 2/ I don't think the descriptions need to start with "Displays". It is very > repetitive. > 3/ For the "Socket Directory" description, this could be NULL if the host > was not specified. > What about the below? > "The socket directory of the connection. NULL if the host or hostaddr are > specified for the connection" > 4/ For most of the fields, they are just the output of a function, such as > "pg_catalog.system_user()". What about the docs simply > link to the documentation of the function. This way we are not copying > descriptions and have to be concerned if the description > of the function changes in the future. > 5/ "true" and "false", do not need double quotes. This is not the convention > used in other places docs. -//- Hi Sami! (v22) I did everything you mentioned earlier, that is, I followed all your suggestions. However, I didn't complete item 4. I'm not sure, but I believe that linking it to the documentation could confuse the user a bit. I chose to keep the descriptions as they were. However, if you have any ideas on how we could outline it, let me know and perhaps we can implement it. Thank you so much! Exemples: [postgres@localhost bin]$ ./psql -x -p 5000 -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5000". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+-- Database | postgres Authenticated User | postgres Socket Directory | Host | 127.0.0.1 Server Port | 5000 Server Address | 127.0.0.1 Client Address | 127.0.0.1 Client Port | 33100 Backend PID | 2974 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | f postgres=# \q [postgres@localhost bin]$ ./psql -x -p 5432 -h localhost Password for user postgres: psql (17devel, server 15.6) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+-- Database | postgres Authenticated User | postgres Socket Directory | Host | localhost Server Port | 5432 Server Address | ::1 Client Address | ::1 Client Port | 57010 Backend PID | 3000 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | Regards, Maiquel Grassi. v22-0001-psql-meta-command-conninfo-plus.patch Description: v22-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Thank you for the updated patch. First and foremost, thank you very much for the review. > The initial and central idea was always to keep the metacommand > "\conninfo" in its original state, that is, to preserve the string as it is. > The idea of "\conninfo+" is to expand this to include more information. > If I change the "\conninfo" command and transform it into a table, > I would have to remove all the translation part (files) that has already > been implemented in the past. I believe that keeping the string and > its translations is a good idea and there is no great reason to change that. You are right. Not much to be gained to change this. For the current patch, I have a few more comments. 1/ The output should be reorganized to show the fields that are part of “conninfo” first. I suggest it should look like this: Current Connection Information -[ RECORD 1 ]+- Database | postgres Authenticated User | postgres Socket Directory | /tmp Host | Server Port | 5432 Server Address | Client Address | Client Port | Backend PID | 30846 System User | Current User | postgres Session User | postgres Application Name | psql SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | f With regards to the documentation. I think it's a good idea that every field has an description. However, I have some comments: 1/ For the description of the conninfo command, what about simplifying like below? "Outputs a string displaying information about the current database connection. When + is appended, more details about the connection are displayed in table format:" 2/ I don't think the descriptions need to start with "Displays". It is very repetitive. 3/ For the "Socket Directory" description, this could be NULL if the host was not specified. what about the below? "The socket directory of the connection. NULL if the host or hostaddr are specified for the connection" 4/ For most of the fields, they are just the output of a function, such as "pg_catalog.system_user()". What about the docs simply link to the documentation of the function. This way we are not copying descriptions and have to be concerned if the description of the function changes in the future. 5/ "true" and "false", do not need double quotes. This is not the convention used in other places docs. Regards, Sami
RE: Psql meta-command conninfo+
Hi Sami! (v21) First and foremost, thank you very much for the review. > 1/ I looked through other psql-meta commands and the “+” adds details but > does not change output format. In this patch, conninfo and conninfo+ > have completely different output. The former is a string with all the details > and the latter is a table. Should conninfo just be a table with the minimal > info > and additional details can be displayed with "+" appended? The initial and central idea was always to keep the metacommand "\conninfo" in its original state, that is, to preserve the string as it is. The idea of "\conninfo+" is to expand this to include more information. If I change the "\conninfo" command and transform it into a table, I would have to remove all the translation part (files) that has already been implemented in the past. I believe that keeping the string and its translations is a good idea and there is no great reason to change that. > 2/ GSSAPI details should show the full details, such as "principal", > "encrypted" and "credentials_delegated". In this new patch, I added these columns. I handled the 'server versions' for cases where the 'credentials_delegated' column is not in the view. It turned out well. Thank you for the idea. 3/ A very nice to have is "Application Name", in the case one sets the application_name within a connection or in the connection string. I did the same here. I liked your idea and added this column in the SQL. Look below to see how it turned out after it's finished. Exemple 1: [postgres@localhost ~]$ /home/pgsql-17devel/bin/psql -x -p 5432 psql (17devel, server 15.6) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Application Name | psql Backend PID | 19439 Server Address | Server Port | 5432 Client Address | Client Port | Socket Directory | /tmp Host | SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | Exemple 2: [postgres@localhost ~]$ /home/pgsql-17devel/bin/psql -x -p 5000 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5000". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]+- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Application Name | psql Backend PID | 19468 Server Address | Server Port | 5000 Client Address | Client Port | Socket Directory | /tmp Host | SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI Authenticated | f GSSAPI Principal | GSSAPI Encrypted | f GSSAPI Credentials Delegated | f Regards, Maiquel Grassi. v21-0001-psql-meta-command-conninfo-plus.patch Description: v21-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Hi, Thanks for working on this. I have a few comments about the current patch. 1/ I looked through other psql-meta commands and the “+” adds details but does not change output format. In this patch, conninfo and conninfo+ have completely different output. The former is a string with all the details and the latter is a table. Should conninfo just be a table with the minimal info and additional details can be displayed with "+" appended? instead of \conninfo displaying a string You are connected to database "postgres" as user "postgres" on host "127.0.01" (address "127.0.0.1") at port "5432". It can instead display the same information in table format Current Connection Information -[ RECORD 1 ]---+--- Database | postgres Authenticated User| postgres Socket Directory | Host | 127.0.0.1 Port | 5432 and \conninfo+ can show the rest of the details Current Connection Information -[ RECORD 1 ]--+ Database | postgres Authenticated User | postgres Socket Directory| Host | 127.0.0.1 Port | 5432 Backend PID | 1234 ... . 2/ GSSAPI details should show the full details, such as "principal", "encrypted" and "credentials_delegated". This also means that pg_stat_ssl will need to be joined with pg_stat_gssapi FROM pg_catalog.pg_stat_ssl ssl LEFT JOIN pg_catalog.pg_stat_gssapi gssapi ON ssl.pid = gssapi.pid ssl.pid = pg_catalog.pg_backend_pid() 3/ A very nice to have is "Application Name", in the case one sets the application_name within a connection or in the connection string. Regards, Sami Imseih Amazon Web Services (AWS)
RE: Psql meta-command conninfo+
> Hi Nathan! > > Sorry for the delay, I was busy with other professional as well as personal > activities. > I made all the changes you suggested. I removed the variables and started > using > views "pg_stat_ssl" and "pg_stat_gssapi". I handled the PostgreSQL versioning > regarding the views used. --//-- Olá Nathan! I think we are very close to possibly finishing this patch, and I would like your help to do it. Is there any correction you deem necessary still? Regards, Maiquel Grassi.
RE: Psql meta-command conninfo+
On Thu, Feb 29, 2024 at 10:02:21PM +, Maiquel Grassi wrote: > Sorry for the delay. I will make the adjustments as requested soon. Looking forward to it. // Hi Nathan! Sorry for the delay, I was busy with other professional as well as personal activities. I made all the changes you suggested. I removed the variables and started using views "pg_stat_ssl" and "pg_stat_gssapi". I handled the PostgreSQL versioning regarding the views used. Here's a brief demonstration of the result: [postgres@localhost ~]$ /home/pgsql-17devel/bin/psql -E -x -p 5433 psql (17devel) Type "help" for help. postgres=# \conninfo+ / QUERY */ SELECT pg_catalog.current_database() AS "Database", 'postgres' AS "Authenticated User", pg_catalog.system_user() AS "System User", pg_catalog.current_user() AS "Current User", pg_catalog.session_user() AS "Session User", pg_catalog.pg_backend_pid() AS "Backend PID", pg_catalog.inet_server_addr() AS "Server Address", pg_catalog.current_setting('port') AS "Server Port", pg_catalog.inet_client_addr() AS "Client Address", pg_catalog.inet_client_port() AS "Client Port", '/tmp' AS "Socket Directory", CASE WHEN pg_catalog.inet_server_addr() IS NULL AND pg_catalog.inet_client_addr() IS NULL THEN NULL ELSE '/tmp' END AS "Host", (SELECT gss_authenticated AS "GSSAPI" FROM pg_catalog.pg_stat_gssapi WHERE pid = pg_catalog.pg_backend_pid()), ssl.ssl AS "SSL Connection", ssl.version AS "SSL Protocol", ssl.cipher AS "SSL Cipher", NULL AS "SSL Compression" FROM pg_catalog.pg_stat_ssl ssl WHERE pid = pg_catalog.pg_backend_pid() ; // Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres Backend PID| 29007 Server Address | Server Port| 5433 Client Address | Client Port| Socket Directory | /tmp Host | GSSAPI | f SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression| Rergards, Maiquel Grassi. v20-0001-psql-meta-command-conninfo-plus.patch Description: v20-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Hi Maiquel, On Thu, Feb 29, 2024 at 10:02:21PM +, Maiquel Grassi wrote: > Sorry for the delay. I will make the adjustments as requested soon. We have only a few weeks left before feature-freeze for v17. Do you think you will be able to send an updated patch soon? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Re: Psql meta-command conninfo+
On Thu, Feb 29, 2024 at 10:02:21PM +, Maiquel Grassi wrote: > Sorry for the delay. I will make the adjustments as requested soon. Looking forward to it. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
RE: Psql meta-command conninfo+
On Sat, Feb 17, 2024 at 02:53:43PM +, Maiquel Grassi wrote: >> The "pg_stat_ssl" view is available from >= PG 9.5, and the "pg_stat_gssapi" >> view is >> available from >= PG 12. The "compression" column was removed from the >> "pg_stat_ssl" from >= PG 14. All of these cases introduce greater complexity >> in >> maintaining the SQL. The central idea from the beginning has always been to >> show >> the user all the information from \conninfo and extend it in \conninfo+. >IMHO we should use the views whenever possible (for the reason stated >above [0]). I think it's okay if we need to fall back to a different >approach for older versions. But presumably we'll discontinue psql support >for these old server versions at some point, at which point we can simply >delete the dead code that doesn't use the views. >> The absence >> of the "compression" column in version 14 and above makes dealing with this >> even >> more complicated, and not showing it seems to contradict \conninfo. >I would be okay with using PQsslAttribute() for all versions for this one >since any remaining support for this feature is on its way out. Once psql >no longer supports any versions that allow SSL compression, we could >probably remove it from \conninfo[+] completely or hard-code it to "off". >> SSL support has been available since version 7.1 (see documentation); if >> there was >> support before that, I can't say. In this regard, it may seem strange, but >> there are still >> many legacy systems running older versions of PostgreSQL. Just yesterday, I >> assisted >> a client who is still using PG 8.2. In these cases, using the "pg_stat_ssl" >> and >> "pg_stat_gssapi" views would not be possible because they don't exist on the >> server. >> I believe that psql should cover as many cases as possible when it comes to >> compatibility >> with older versions (even those no longer supported). In this case, >> concerning SSL and >> GSS, I think libpq is better prepared to handle this. >At the moment, the psql support cutoff appears to be v9.2 (see commit >cf0cab8), which has been out of support for over 6 years. If \conninfo+ >happens to work for older versions, then great, but I don't think we should >expend too much energy in this area. [0] https://postgr.es/m/20240216155449.GA1236054%40nathanxps13 // Hi Nathan! Sorry for the delay. I will make the adjustments as requested soon. Regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
On Sat, Feb 17, 2024 at 02:53:43PM +, Maiquel Grassi wrote: > The "pg_stat_ssl" view is available from >= PG 9.5, and the "pg_stat_gssapi" > view is > available from >= PG 12. The "compression" column was removed from the > "pg_stat_ssl" from >= PG 14. All of these cases introduce greater complexity > in > maintaining the SQL. The central idea from the beginning has always been to > show > the user all the information from \conninfo and extend it in \conninfo+. IMHO we should use the views whenever possible (for the reason stated above [0]). I think it's okay if we need to fall back to a different approach for older versions. But presumably we'll discontinue psql support for these old server versions at some point, at which point we can simply delete the dead code that doesn't use the views. > The absence > of the "compression" column in version 14 and above makes dealing with this > even > more complicated, and not showing it seems to contradict \conninfo. I would be okay with using PQsslAttribute() for all versions for this one since any remaining support for this feature is on its way out. Once psql no longer supports any versions that allow SSL compression, we could probably remove it from \conninfo[+] completely or hard-code it to "off". > SSL support has been available since version 7.1 (see documentation); if > there was > > support before that, I can't say. In this regard, it may seem strange, but > there are still > many legacy systems running older versions of PostgreSQL. Just yesterday, I > assisted > a client who is still using PG 8.2. In these cases, using the "pg_stat_ssl" > and > "pg_stat_gssapi" views would not be possible because they don't exist on the > server. > I believe that psql should cover as many cases as possible when it comes to > compatibility > with older versions (even those no longer supported). In this case, > concerning SSL and > GSS, I think libpq is better prepared to handle this. At the moment, the psql support cutoff appears to be v9.2 (see commit cf0cab8), which has been out of support for over 6 years. If \conninfo+ happens to work for older versions, then great, but I don't think we should expend too much energy in this area. [0] https://postgr.es/m/20240216155449.GA1236054%40nathanxps13 -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
RE: Psql meta-command conninfo+
Hi! (v19) Adjusted the description of each column in the documentation as promised. I used the existing documentation as a basis for each SQL function used, as well as for functions and views related to SSL and GSSAPI (documentation). If you can validate, I appreciate it. Regards, Maiquel Grassi. v19-0001-psql-meta-command-conninfo-plus.patch Description: v19-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
Hi Nathan! (v18) >I might be alone on this, but I think this command should output the same >columns regardless of the version, whether it's using SSL, etc. and just >put NULL in any that do not apply. IMHO that would simplify the code and >help prevent confusion. Plus, I'm not aware of any existing meta-commands >that provide certain columns conditionally. I implemented your suggestion. Now, whenever the \conninfo+ command is invoked, all columns will appear. Contextually inappropriate cases will return NULL. I also adjusted the names of the columns related to SSL to make this information clearer for the user. I haven't focused on documenting the columns yet. I will do that soon. >Could we pull some of this information from pg_stat_ssl instead of from >libpq? The reason I suggest this is because I think it would be nice if >the query that \conninfo+ uses could be copy/pasted as needed and not rely >on hard-coded values chosen by the client. I've been considering using the views "pg_stat_ssl" and "pg_stat_gssapi"; however, I realized that dealing with version-related cases using them is more complicated. Let me explain the reasons: The "pg_stat_ssl" view is available from >= PG 9.5, and the "pg_stat_gssapi" view is available from >= PG 12. The "compression" column was removed from the "pg_stat_ssl" from >= PG 14. All of these cases introduce greater complexity in maintaining the SQL. The central idea from the beginning has always been to show the user all the information from \conninfo and extend it in \conninfo+. The absence of the "compression" column in version 14 and above makes dealing with this even more complicated, and not showing it seems to contradict \conninfo. SSL support has been available since version 7.1 (see documentation); if there was support before that, I can't say. In this regard, it may seem strange, but there are still many legacy systems running older versions of PostgreSQL. Just yesterday, I assisted a client who is still using PG 8.2. In these cases, using the "pg_stat_ssl" and "pg_stat_gssapi" views would not be possible because they don't exist on the server. I believe that psql should cover as many cases as possible when it comes to compatibility with older versions (even those no longer supported). In this case, concerning SSL and GSS, I think libpq is better prepared to handle this. I may be mistaken in my statement and I welcome any better suggestions. For now, I've maintained the implementation using libpq as it seems to be working well and is not contradicting \conninfo. If you have any suggestions on how to work around the absence of the "compression" column, we can reconsider how to implement it without using libpq. Tests: [postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5432 Password for user postgres: psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | postgres System User| scram-sha-256:postgres Current User | postgres Session User | postgres Backend PID| 22431 Server Address | 127.0.0.1 Server Port| 5432 Client Address | 127.0.0.1 Client Port| 51300 Socket Directory | Host | 127.0.0.1 SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression| GSSAPI | f [postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5433 Password for user postgres: psql (17devel, server 15.6) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5433". SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+ Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres Backend PID| 22438 Server Address | 127.0.0.1 Server Port| 5433 Client Address | 127.0.0.1 Client Port| 36016 Socket Directory | Host | 127.0.0.1 SSL Connection | t SSL Protocol | TLSv1.2 SSL Cipher | ECDHE-RSA-AES256-GCM-SHA384 SSL Compression| off GSSAPI | f Thank you very much for your sugestions and help! Maiquel Grassi. v18-0001-psql-meta-command-conninfo-plus.patch Description: v18-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
Hi! >7) -h 0.0.0.0 - As you mentioned, this is one of the cases where host >and "server address" differ. > I am not sure if it is an issue. Perhaps the other reviewers might >have an opinion on it >$ /usr/local/postgres-dev/bin/psql -x -U postgres -h 0.0.0.0 -c >"\conninfo+" -c "\conninfo" >Current Connection Information >-[ RECORD 1 ]--+--- >Database | postgres >Authenticated User | postgres >System User| >Current User | postgres >Session User | postgres >Backend PID| 404395 >Server Address | 127.0.0.1 >Server Port| 5432 >Client Address | 127.0.0.1 >Client Port| 54806 >Socket Directory | >Host | 0.0.0.0 >Encryption | SSL >Protocol | TLSv1.3 >Cipher | TLS_AES_256_GCM_SHA384 >Compression| off I believe we don't actually have a problem here. To me, this makes sense. I'm not a Networking expert, but from my standpoint, any string or IP accepted by the "host" parameter of psql, pointing to "127.0.0.1" or to "::1", is correct. I see it as a convention (would need to revisit Tanenbaum's books haha), and I don't think there's a need to modify it. But as you mentioned, if someone with more Networking knowledge could weigh in, a suggestion would be welcome. >I'm not sure of the impact of this change in the existing \conninfo - at >least the cfbot and "make -j check-world" didn't complain. >I'll take a closer look at it as soon we have test cases. This type of modification, in principle, does not generate errors as we are only changing the display on screen of the strings already previously stored. >To keep it consistent with the other options, we might wanna use "+ is >appended" instead of "+ is specified" or "+ is given" It seems to me that "appended" sounds good. I opted for it. Following your suggestion, and merging this with the existing previous ideas from the documentation, I've created a provisional prototype of the column descriptions. At a later stage, I'll place the descriptions correctly by removing placeholders (blah blah blah). Along with this, I'll evaluate an iteration suggested by Nathan Bossart, who also proposed changes. Thank you for your work. Regards, Maiquel Grassi. v17-0001-psql-meta-command-conninfo-plus.patch Description: v17-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Thanks for your work on this. I haven't been keeping up with the discussion, but I took a quick look at the latest patch. + +"Database", "Authenticated User", "System User" (only for PostgreSQL 16 or higher), +"Current User", "Session User", "Backend PID", "Server Address", "Server Port", +"Client Address", "Client Port", "Socket Directory", and "Host" columns are listed +by default when \conninfo+ is invoked. The columns "Encryption", +"Protocol", "Cipher", and "Compression" are added to this output when TLS (SSL) +authentication is used. The same applies to GSS authentication is used, where the +"GSSAPI" column is also added to the \conninfo+ output. I might be alone on this, but I think this command should output the same columns regardless of the version, whether it's using SSL, etc. and just put NULL in any that do not apply. IMHO that would simplify the code and help prevent confusion. Plus, I'm not aware of any existing meta-commands that provide certain columns conditionally. + if (PQsslInUse(pset.db)) + { + protocol = PQsslAttribute(pset.db, "protocol"); + cipher = PQsslAttribute(pset.db, "cipher"); + compression = PQsslAttribute(pset.db, "compression"); + appendPQExpBuffer(, + " ,'SSL' AS \"Encryption\",\n" + " '%s' AS \"Protocol\",\n" + " '%s' AS \"Cipher\",\n" + " '%s' AS \"Compression\"\n", + protocol ? protocol : _("unknown"), + cipher ? cipher : _("unknown"), + (compression && strcmp(compression, "off") != 0) ? _("on") : _("off")); + } Could we pull some of this information from pg_stat_ssl instead of from libpq? The reason I suggest this is because I think it would be nice if the query that \conninfo+ uses could be copy/pasted as needed and not rely on hard-coded values chosen by the client. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Re: Psql meta-command conninfo+
On 15.02.24 23:16, Maiquel Grassi wrote: > > Hi! > > (v16) > > In this version, I made a small adjustment to the indentation > of the \conninfo code and described the columns as returned > by \conninfo+ as suggested by Jim Jones. > > I've performed the following tests with v16: 1) hostaddr=172.19.42.1 $ /usr/local/postgres-dev/bin/psql -x "\ host=server.uni-muenster.de hostaddr=172.19.42.1 user=jim dbname=postgres sslrootcert=server-certificates/server.crt sslcert=jim-certificates/jim.crt sslkey=jim-certificates/jim.key" -c "\conninfo+" -c "\conninfo" Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | jim System User | cert:emailAddress=wwwad...@uni-muenster.de,CN=jim,OU=WWU IT,O=Universitaet Muenster,L=Muenster,ST=Nordrhein-Westfalen,C=DE Current User | jim Session User | jim Backend PID | 386839 Server Address | 172.19.42.1 Server Port | 5432 Client Address | 192.168.178.27 Client Port | 35602 Socket Directory | Host | server.uni-muenster.de Encryption | SSL Protocol | TLSv1.3 Cipher | TLS_AES_256_GCM_SHA384 Compression | off You are connected to database "postgres" as user "jim" on host "server.uni-muenster.de" (address "172.19.42.1") at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) The same with non-superusers $ /usr/local/postgres-dev/bin/psql -x "\ host=server.uni-muenster.de hostaddr=172.19.42.1 user=jim dbname=postgres sslrootcert=server-certificates/server.crt sslcert=jim-certificates/jim.crt sslkey=jim-certificates/jim.key" -c "SET ROLE foo" -c "\conninfo+" -c "\conninfo" SET Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | jim System User | cert:emailAddress=wwwad...@uni-muenster.de,CN=jim,OU=WWU IT,O=Universitaet Muenster,L=Muenster,ST=Nordrhein-Westfalen,C=DE Current User | foo Session User | jim Backend PID | 547733 Server Address | 172.19.42.1 Server Port | 5432 Client Address | 192.168.178.27 Client Port | 58508 Socket Directory | Host | server.uni-muenster.de Encryption | SSL Protocol | TLSv1.3 Cipher | TLS_AES_256_GCM_SHA384 Compression | off You are connected to database "postgres" as user "jim" on host "server.uni-muenster.de" (address "172.19.42.1") at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) 2) -h 192.168.178.27 $ /usr/local/postgres-dev/bin/psql -x -U postgres -h 192.168.178.27 -c "\conninfo+" -c "\conninfo" Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Backend PID | 399670 Server Address | 192.168.178.27 Server Port | 5432 Client Address | 192.168.178.27 Client Port | 44174 Socket Directory | Host | 192.168.178.27 Encryption | SSL Protocol | TLSv1.3 Cipher | TLS_AES_256_GCM_SHA384 Compression | off You are connected to database "postgres" as user "postgres" on host "192.168.178.27" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) 3) via socket $ /usr/local/postgres-dev/bin/psql -x -U postgres -c "\conninfo+" -c "\conninfo" Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Backend PID | 394273 Server Address | Server Port | 5432 Client Address | Client Port | Socket Directory | /tmp Host | You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". 4) -h 127.0.0.1 $ /usr/local/postgres-dev/bin/psql -x -U postgres -h 127.0.0.1 -c "\conninfo+" -c "\conninfo" Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Backend PID | 396070 Server Address | 127.0.0.1 Server Port | 5432 Client Address | 127.0.0.1 Client Port | 52528 Socket Directory | Host | 127.0.0.1 Encryption | SSL Protocol | TLSv1.3 Cipher | TLS_AES_256_GCM_SHA384 Compression | off You are connected to database "postgres" as user
RE: Psql meta-command conninfo+
Hi! (v16) In this version, I made a small adjustment to the indentation of the \conninfo code and described the columns as returned by \conninfo+ as suggested by Jim Jones. Regards, Maiquel Grassi. v16-0001-psql-meta-command-conninfo-plus.patch Description: v16-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
>v14 applies cleanly and the SSL info is now shown as previously >suggested. Here is a more comprehensive test: > > >$ /usr/local/postgres-dev/bin/psql -x "\ >host=server.uni-muenster.de >hostaddr=172.19.42.1 >user=jim dbname=postgres >sslrootcert=server-certificates/server.crt >sslcert=jim-certificates/jim.crt >sslkey=jim-certificates/jim.key" > >psql (17devel) >SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, >compression: off) >Type "help" for help. > >postgres=# SET ROLE foo; >SET >postgres=> \conninfo+ >Current Connection Information >-[ RECORD 1 >]--+--- >Database | postgres >Authenticated User | jim >System User| cert:emailAddress=j...@uni-muenster.de,CN=jim,OU=WWU >IT,O=Universitaet Muenster,L=Muenster,ST=Nordrhein-Westfalen,C=DE >Current User | foo >Session User | jim >Backend PID| 278294 >Server Address | 172.19.42.1 >Server Port| 5432 >Client Address | 192.168.178.27 >Client Port| 54948 >Socket Directory | >Host | server.uni-muenster.de >Encryption | SSL >Protocol | TLSv1.3 >Cipher | TLS_AES_256_GCM_SHA384 >Compression| off > >postgres=> \conninfo >You are connected to database "postgres" as user "jim" on host >"server.uni-muenster.de" (address "127.0.0.1") at port "5432". >SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, >compression: off) >A little odd is that "Server Address" of \conninfo+ differs from >"address" of \conninfo... // Hi Jim! Tests performed on CentOS Linux 7. I made some further observations and concluded that there will be more cases where the "address" from \conninfo will differ from the "Server Address" from \conninfo+. Below is a more detailed example. The input of "hostaddr" or "host" in the psql call can be any pointing to "loopback local" and the connection will still be established. For example, all of these are accepted: Case (inet): psql -x --host 0 psql -x --host 0.0.0.0 psql -x hostaddr=0 psql -x hostaddr=0.0.0.0 All these examples will have "Server Address" = 127.0.0.1 Case (inet6): psql -x --host :: psql -x --host * (this entry is not accepted) psql -x --host \* psql -x --host "*" psql -x hostaddr=:: psql -x hostaddr=* All these examples will have "Server Address" = ::1 Thus, the inet_server_addr() function will return 127.0.0.1 or ::1 which in some cases will differ from the "address" from \conninfo. [postgres@localhost bin]$ ./psql -x hostaddr=0 Password for user postgres: psql (17devel) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) Type "help" for help. postgres=# SET ROLE maiquel; SET postgres=> \conninfo You are connected to database "postgres" as user "postgres" on host "0" (address "0.0.0.0") at port "5432". SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) postgres=> \conninfo+ Current Connection Information -[ RECORD 1 ]--+ Database | postgres Authenticated User | postgres System User| scram-sha-256:postgres Current User | maiquel Session User | postgres Backend PID| 15205 Server Address | 127.0.0.1 Server Port| 5432 Client Address | 127.0.0.1 Client Port| 57598 Socket Directory | Host | 0 Encryption | SSL Protocol | TLSv1.2 Cipher | ECDHE-RSA-AES256-GCM-SHA384 Compression| off postgres=> \q [postgres@localhost bin]$ ping 0.0.0.0 PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.061 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.069 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.071 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.107 ms ^C --- 0.0.0.0 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 0.061/0.077/0.107/0.017 ms As demonstrated above, "address" = 0.0.0.0 and "Server Address" = 127.0.0.1 are divergent. In practice, these IPs are the "same", and the ping from the example proves it. However, we are concerned here with the psql user, and this may seem confusing to them at first glance. I would like to propose a change in "address" so that it always returns the same as "Server Address", that is, to use the inet_server_address() function in "address". Result: [postgres@localhost bin]$ ./psql -x hostaddr=0 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "0" (address "127.0.0.1") at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+-- Database | postgres Authenticated User | postgres System User| Current User | postgres
Re: Psql meta-command conninfo+
On 12.02.24 15:16, Maiquel Grassi wrote: > > (v14) > > v14 applies cleanly and the SSL info is now shown as previously suggested. Here is a more comprehensive test: $ /usr/local/postgres-dev/bin/psql -x "\ host=server.uni-muenster.de hostaddr=172.19.42.1 user=jim dbname=postgres sslrootcert=server-certificates/server.crt sslcert=jim-certificates/jim.crt sslkey=jim-certificates/jim.key" psql (17devel) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Type "help" for help. postgres=# SET ROLE foo; SET postgres=> \conninfo+ Current Connection Information -[ RECORD 1 ]--+--- Database | postgres Authenticated User | jim System User | cert:emailAddress=j...@uni-muenster.de,CN=jim,OU=WWU IT,O=Universitaet Muenster,L=Muenster,ST=Nordrhein-Westfalen,C=DE Current User | foo Session User | jim Backend PID | 278294 Server Address | 172.19.42.1 Server Port | 5432 Client Address | 192.168.178.27 Client Port | 54948 Socket Directory | Host | server.uni-muenster.de Encryption | SSL Protocol | TLSv1.3 Cipher | TLS_AES_256_GCM_SHA384 Compression | off postgres=> \conninfo You are connected to database "postgres" as user "jim" on host "server.uni-muenster.de" (address "127.0.0.1") at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) A little odd is that "Server Address" of \conninfo+ differs from "address" of \conninfo... I think the documentation could add a little more info than just this: > When no + is specified, it simply prints a textual description of a few connection options. When + is given, more complete information is displayed as a table. Perhaps briefly mentioning the returned columns or simply listing them would be IMHO a nice addition. For some users the semantics of "Authenticated User", "System User", "Current User" and "Session User" can be a little confusing. And yes, I realize the current documentation of \conninfo is already a little vague :). Thanks for working on this -- Jim
Re: Psql meta-command conninfo+
Hi, On 12.02.2024 17:16, Maiquel Grassi wrote: The "if (db == NULL)" has been removed, as well as the message inside it. To always maintain the same error messages, I changed the validation of "\conninfo" to match the validation used for "\conninfo+". Therefore, now "\conninfo" and "\conninfo+" return the same error when "pg_terminate_backend()" terminates this session through another session. This make sense to me. Thank you for this work. -- Pavel Luzanov Postgres Professional:https://postgrespro.com
RE: Psql meta-command conninfo+
>I found that \conninfo and \conninfo+ act differently when the connection is >broken. >I used pg_terminate_backend function from another session to terminate an open >psql session. >After that, \conninfo does not see the connection break (surprisingly!), and >\conninfo+ returns an error: > >postgres@postgres(17.0)=# \conninfo+ >FATAL: terminating connection due to administrator command >server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. >The connection to the server was lost. Attempting reset: Succeeded. > >postgres@postgres(17.0)=# \conninfo >You are connected to database "postgres" as user "postgres" via socket in >"/tmp" at port "5401". > >Another surprise is that this check: if (db == NULL) did not work in both >cases. --//-- Hi Pavel! (v14) The "if (db == NULL)" has been removed, as well as the message inside it. To always maintain the same error messages, I changed the validation of "\conninfo" to match the validation used for "\conninfo+". Therefore, now "\conninfo" and "\conninfo+" return the same error when "pg_terminate_backend()" terminates this session through another session. The result of the adjustment is as follows: Case 1 ("\conninfo+"): [postgres@localhost bin]$ ./psql -x psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres Backend PID| 24381 Server Address | Server Port| 5432 Client Address | Client Port| Socket Directory | /tmp Host | postgres=# \conninfo+ FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. Case 2 ("\conninfo"): [postgres@localhost bin]$ ./psql -x psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres Backend PID| 24539 Server Address | Server Port| 5432 Client Address | Client Port| Socket Directory | /tmp Host | postgres=# \conninfo FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. In both cases, the sessions were terminated by another session. Regards, Maiquel Grassi. v14-0001-psql-meta-command-conninfo-plus.patch Description: v14-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
>Database | postgres >[...] >Host | 127.0.0.1 >Encryption | SSL >Protocol | PQsslAttribute(protocol) >Cipher | PQsslAttribute(cipher) >Compression| PQsslAttribute(compression) > >When GSS, like this > >Database | postgres >[...] >Host | 127.0.0.1 >Encryption | GSS --//-- Hi PgHackers, Columns were added for SSL and GSS. For SSL, I conducted some tests as follows. For GSS, I will perform them and intend to provide a sample here in the next interaction. If anyone can and wants to test GSSAPI as well, I appreciate it. [postgres@localhost bin]$ ./psql -h localhost -p 5432 -x psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+-- Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres Backend PID| 15809 Server Address | ::1 Server Port| 5432 Client Address | ::1 Client Port| 56890 Socket Directory | Host | localhost postgres=# \q [postgres@localhost bin]$ ./psql -h localhost -p 5433 -x psql (17devel, server 15.6) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5433". SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+ Database | postgres Authenticated User | postgres Current User | postgres Session User | postgres Backend PID| 15811 Server Address | ::1 Server Port| 5433 Client Address | ::1 Client Port| 40622 Socket Directory | Host | localhost Encryption | SSL Protocol | TLSv1.2 Cipher | ECDHE-RSA-AES256-GCM-SHA384 Compression| off Regards, Maiquel Grassi. v13-0001-psql-meta-command-conninfo-plus.patch Description: v13-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
>Hmm, I noticed that this would call printSSLInfo() and printGSSInfo() >after listConnectionInformation. It would be much better to show these >in tabular format as well and remove the calls to printSSL/GSSInfo. > >I propose additional columns to the same \conninfo+ table; when SSL, >like this: > >Database | postgres >[...] >Host | 127.0.0.1 >Encryption | SSL >Protocol | PQsslAttribute(protocol) >Cipher | PQsslAttribute(cipher) >Compression| PQsslAttribute(compression) > >When GSS, like this > >Database | postgres >[...] >Host | 127.0.0.1 >Encryption | GSS > >(why don't we print anything else in printGSSInfo()? That's weird.) --//-- Hi Álvaro, Thank you for the suggestion. I will remove printSSLInfo() and printGSSInfo() and incorporate the suggested fields into the tabular result of "\conninfo+". If it's necessary to adjust printGSSInfo(), we can work on that as well. At first glance, I leave it open for others to analyze and give their opinion. I'd also like to ask for help with a difficulty. Currently, I'm working on resolving this situation (highlighted by Pavel Luzanov). How can we make \conninfo return the same message as \conninfo+ after closing the current session in another session with pg_terminate_backend(pid)? [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Backend PID | Server Address | Server Port | Client Address | Client Port | Socket Directory | Host --++-+--+--+-++-++-+--+-- postgres | postgres | | postgres | postgres | 17281 || 5432|| | /tmp | (1 row) postgres=# 2024-02-09 09:15:24.152 -03 [17281] FATAL: terminating connection due to administrator command postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. postgres=# Tks a lot! Maiquel Grassi.
Re: Psql meta-command conninfo+
Hmm, I noticed that this would call printSSLInfo() and printGSSInfo() after listConnectionInformation. It would be much better to show these in tabular format as well and remove the calls to printSSL/GSSInfo. I propose additional columns to the same \conninfo+ table; when SSL, like this: Database | postgres [...] Host | 127.0.0.1 Encryption | SSL Protocol | PQsslAttribute(protocol) Cipher | PQsslAttribute(cipher) Compression| PQsslAttribute(compression) When GSS, like this Database | postgres [...] Host | 127.0.0.1 Encryption | GSS (why don't we print anything else in printGSSInfo()? That's weird.) -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "Pido que me den el Nobel por razones humanitarias" (Nicanor Parra)
RE: Psql meta-command conninfo+
>Hi Nathan > >On 09.02.24 03:41, Nathan Bossart wrote: > >> Separately, does >> the server version really belong here? I'm not sure I would consider that >> to be connection information. >> >I tend to agree with you. The info there wouldn't hurt, but perhaps the >client version would be a better fit. --//-- Hi! I believe that if we include the server version, it would also be necessary to include the version of psql. This would make it clearer for the user. I agree that this won't make much difference in practice, especially because we're interested in creating a setof information directly related to the connection. I prefer to keep it suppressed for now. In the future, if necessary, we can add this information without any problem. In v12, "Server Version" is already removed. Tks! Maiquel Grassi.
RE: Psql meta-command conninfo+
Hi Pavel! >The patch v10 build ends with a warning: >$ make -j --silent >describe.c:911:1: warning: no previous prototype for >‘listConnectionInformation’ [-Wmissing-prototypes] > 911 | listConnectionInformation() | ^ >About terms. I resolved this in v11. I had forgotten to put the 'void' inside the parentheses (describe.h and describe.c). >postgres@postgres(17.0)=# \x \conninfo+ >Expanded display is on. >Current Connection Information >-[ RECORD 1 ]--+- >Database | postgres >Authenticated User | postgres >System User| >Current User | postgres >Session User | postgres >Session PID| 951112 >Server Version | 17devel >Server Address | >Server Port| 5401 >Client Address | >Client Port| >Socket Directory | /tmp >Host | >It looks like "Session PID" is a new term for the server process identifier. >How about changing the name to "Backend PID" (from pg_backend_pid) or even PID >(from pg_stat_activity)? You're right, it's better to stick with the proper terms already in use in PostgreSQL. This ensures that the user doesn't get confused. I've changed it to "Backend PID". >On 08.02.2024 17:58, Maiquel Grassi wrote: > 1. > + if (db == NULL) > + printf(_("You are currently not connected to a > database.\n")); > > This check is performed for \conninfo, but not for \conninfo+. 1. The connection check for the case of \conninfo+ is handled by "describe.c" itself since it deals with queries. I might be mistaken, but I believe that by using "printQuery()" via "describe.c", this is already ensured, and there is no need to evaluate the connection status. >I found that \conninfo and \conninfo+ act differently when the connection is >broken. >I used pg_terminate_backend function from another session to terminate an open >psql session. >After that, \conninfo does not see the connection break (surprisingly!), and >\conninfo+ returns an error: >postgres@postgres(17.0)=# \conninfo+ >FATAL: terminating connection due to administrator command >server closed the connection unexpectedly >This probably means the server terminated abnormally >before or while processing the request. >The connection to the server was lost. Attempting reset: Succeeded. For this case, I believe it's already resolved, because if you get a return indicating that the connection was terminated, and indeed it was, then "describe.c" is handling it correctly. At least that's what it seems like. >postgres@postgres(17.0)=# \conninfo >You are connected to database "postgres" as user "postgres" via socket in >"/tmp" at port "5401". Here it seems like we have an issue to be studied and subsequently resolved. >Another surprise is that this check: if (db == NULL) did not work in both >cases. I will investigate further and, if necessary, remove it. Here's v12, in the next version, I'll try to address the above situation. Thanks a lot! Maiquel Grassi. v12-0001-psql-meta-command-conninfo-plus.patch Description: v12-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
>Sorry if this has been brought up, but I noticed that some of the >information is listed below the result set: > > postgres=# \conninfo+ >Current Connection Information > -[ RECORD 1 ]--+- > Database | postgres > Authenticated User | nathan > System User| > Current User | nathan > Session User | nathan > Session PID| 659410 > Server Version | 17devel > Server Address | ::1 > Server Port| 5432 > Client Address | ::1 > Client Port| 59886 > Socket Directory | > Host | ::1 > SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) >Shouldn't we move this information into the result set? Separately, does >the server version really belong here? I'm not sure I would consider that >to be connection information. --//-- Hi Nathan, The "Server Version" information is closely related to the connection. However, it does seem to be an element that does not belong to this set. I removed this column and left only what is truly connection info. Regarding the functions "printSSLInfo()" and "printGSSInfo()", I agree that we should include them in the returned dataset (as two additional columns). A good argument is that this will make more sense when using \x (Expanded display). However, they are declared and defined within the "command.c" file. To make calls to "printSSLInfo()" and "printGSSInfo()" within "describe.c", we would need to move their declarations to a new header and create a new C file. I believe something like "ssl_gss_info.h" and "ssl_gss_info.c". I'm not sure, but at first glance, this is what occurs to me. Do you have any better or more concise suggestions for resolving this? Regards, Maiquel Grassi. v11-0001-psql-meta-command-conninfo-plus.patch Description: v11-0001-psql-meta-command-conninfo-plus.patch v11-0001-psql-meta-command-conninfo-plus.patch Description: v11-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Hi, Maiquel! The patch v10 build ends with a warning: $ make -j --silent describe.c:911:1: warning: no previous prototype for ‘listConnectionInformation’ [-Wmissing-prototypes] 911 | listConnectionInformation() | ^ About terms. postgres@postgres(17.0)=# \x \conninfo+ Expanded display is on. Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | postgres System User| Current User | postgres Session User | postgres *Session PID | 951112 *Server Version | 17devel Server Address | Server Port| 5401 Client Address | Client Port| Socket Directory | /tmp Host | It looks like "Session PID" is a new term for the server process identifier. How about changing the name to "Backend PID" (from pg_backend_pid) or even PID (from pg_stat_activity)? On 08.02.2024 17:58, Maiquel Grassi wrote: > 1. > + if (db == NULL) > + printf(_("You are currently not connected to a database.\n")); > > This check is performed for \conninfo, but not for \conninfo+. 1. The connection check for the case of \conninfo+ is handled by "describe.c" itself since it deals with queries. I might be mistaken, but I believe that by using "printQuery()" via "describe.c", this is already ensured, and there is no need to evaluate the connection status. I found that \conninfo and \conninfo+ act differently when the connection is broken. I used pg_terminate_backend function from another session to terminate an open psql session. After that, \conninfo does not see the connection break (surprisingly!), and \conninfo+ returns an error: postgres@postgres(17.0)=# \conninfo+ FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. postgres@postgres(17.0)=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5401". Another surprise is that this check:if (db == NULL) did not work in both cases. -- Pavel Luzanov Postgres Professional:https://postgrespro.com
Re: Psql meta-command conninfo+
Hi Nathan On 09.02.24 03:41, Nathan Bossart wrote: > Separately, does > the server version really belong here? I'm not sure I would consider that > to be connection information. > I tend to agree with you. The info there wouldn't hurt, but perhaps the client version would be a better fit. -- Jim
Re: Psql meta-command conninfo+
Sorry if this has been brought up, but I noticed that some of the information is listed below the result set: postgres=# \conninfo+ Current Connection Information -[ RECORD 1 ]--+- Database | postgres Authenticated User | nathan System User| Current User | nathan Session User | nathan Session PID| 659410 Server Version | 17devel Server Address | ::1 Server Port| 5432 Client Address | ::1 Client Port| 59886 Socket Directory | Host | ::1 SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Shouldn't we move this information into the result set? Separately, does the server version really belong here? I'm not sure I would consider that to be connection information. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
RE: Psql meta-command conninfo+
On 08.02.24 21:37, Erik Wienhold wrote: >> Modifiers such as + or S in \dS are not covered by autocompletion. >> src/bin/psql/tab-complete.c only specifies backslash commands in their >> basic form (without modifiers). >> >> (\dS actually autocompletes to \ds to my surprise) >> >Aha... I never noticed it. Well, with most commands having 1 - 3 >characters it is not a surprised I never used it :) >That "\dS" autocompletes to "\ds " surprises me even more. >Thanks for pointing out! --//-- Good evening, dear all! Here is the mechanism that implements this: https://github.com/postgres/postgres/blob/b619852086ed2b5df76631f5678f60d3bebd3745/src/bin/psql/tab-complete.h . . . 1673 /* Match the last N words before point, case-sensitively. */ 1674 #define TailMatchesCS(...) \ 1675 TailMatchesImpl(true, previous_words_count, previous_words, \ 1676 VA_ARGS_NARGS(__VA_ARGS__), __VA_ARGS__) . . . 4824 else if (TailMatchesCS("\\ds*")) 4825 COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences); . . . There is a rather large list of meta-commands that are handled by TailMatchesCS(...). For example: \ENCODING autocompletes to \encoding \eNcOdInG autocompletes to \encoding \dU or \DU autocompletes to \du Including the command under discussion: \CONNINFO autocompletes to \conninfo For the meta-commands[+], there is no autocomplete. Regards, Maiquel Grassi.
Re: Psql meta-command conninfo+
Hi Erik On 08.02.24 21:37, Erik Wienhold wrote: > Modifiers such as + or S in \dS are not covered by autocompletion. > src/bin/psql/tab-complete.c only specifies backslash commands in their > basic form (without modifiers). > > (\dS actually autocompletes to \ds to my surprise) > Aha... I never noticed it. Well, with most commands having 1 - 3 characters it is not a surprised I never used it :) That "\dS" autocompletes to "\ds " surprises me even more. Thanks for pointing out! -- Jim
RE: Psql meta-command conninfo+
>On 2024-02-08 20:37 +0100, Jim Jones wrote: >> One thing I just noticed. The psql autocomplete feature does not suggest >> the new + option of \conninfo. For instance, when typing "\connin[TAB]" >> it automatically autocompletes to "\conninfo ". I guess it should also >> be included in this patch. > >Modifiers such as + or S in \dS are not covered by autocompletion. >src/bin/psql/tab-complete.c only specifies backslash commands in their >basic form (without modifiers). > >(\dS actually autocompletes to \ds to my surprise) > >> I can do a more thorough review of the code when you add the >> documentation and tests to the patch. > >I noticed that the pattern parameter in listConnectionInformation is >unused. exec_command_conninfo scans the pattern but \conninfo should >not accept any argument. So the pattern can be removed entirely. --//-- Hi Erik, Exactly, in "\conninfo+" the "pattern" argument was not introduced and therefore "listConnectionInformation()" can be declared (signed) without any arguments. In the future, if necessary, and if there is a need to add any "pattern", then that can be done. However, that's not the current scenario. I removed everything related to the "pattern" from the patch. Regarding "(\dS actually autocompletes to \ds to my surprise)", I was also surprised. I haven't studied the code yet to understand why this happens. It seems curious to me. I'll try to understand this implementation better. I'm continuing the development of "\conninfo+" and now moving on to tests. Tks a lot! Regards, Maiquel Grassi. v10-0001-psql-meta-command-conninfo-plus.patch Description: v10-0001-psql-meta-command-conninfo-plus.patch
RE: Psql meta-command conninfo+
> v8 no longer throws a permission denied error for non-superusers - it is > IMHO much nicer this way. > > $ /usr/local/postgres-dev/bin/psql postgres -p 5432 -h 127.0.0.1 -U jim > psql (17devel) > Type "help" for help. > > postgres=# \x > Expanded display is on. > postgres=# \conninfo+ > Current Connection Information > -[ RECORD 1 ]--+-- > Database | postgres > Authenticated User | jim > System User| > Current User | jim > Session User | jim > Session PID| 1321493 > Server Version | 17devel > Server Address | 127.0.0.1 > Server Port| 5432 > Client Address | 127.0.0.1 > Client Port| 49366 > Socket Directory | > Host | 127.0.0.1 > > postgres=# SET ROLE foo; > SET > postgres=> \conninfo+ > Current Connection Information > -[ RECORD 1 ]--+-- > Database | postgres > Authenticated User | jim > System User| > Current User | foo > Session User | jim > Session PID| 1321493 > Server Version | 17devel > Server Address | 127.0.0.1 > Server Port| 5432 > Client Address | 127.0.0.1 > Client Port| 49366 > Socket Directory | > Host | 127.0.0.1 > > The patch now applies cleanly. > > One thing I just noticed. The psql autocomplete feature does not suggest > the new + option of \conninfo. For instance, when typing "\connin[TAB]" > it automatically autocompletes to "\conninfo ". I guess it should also > be included in this patch. > > I can do a more thorough review of the code when you add the > documentation and tests to the patch. > > Thanks! --//-- Hi Jim, It's not a psql standard to use tab-complete for commands ending with +. You can verify this in the /* psql's backslash commands. */ section of the file "/src/bin/psql/tab-complete.c". https://github.com/postgres/postgres/blob/fdfb92c0307c95eba10854196628d88e6708901e/src/bin/psql/tab-complete.c In v9, I started the documentation work and am open to suggestions. > "I can do a more thorough review of the code when you add the > documentation and tests to the patch." Soon I'll be developing the tests. And that will be welcome. Thanks a lot! Regards, Maiquel Grassi. v9-0001-psql-meta-command-conninfo-plus.patch Description: v9-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
On 2024-02-08 20:37 +0100, Jim Jones wrote: > One thing I just noticed. The psql autocomplete feature does not suggest > the new + option of \conninfo. For instance, when typing "\connin[TAB]" > it automatically autocompletes to "\conninfo ". I guess it should also > be included in this patch. Modifiers such as + or S in \dS are not covered by autocompletion. src/bin/psql/tab-complete.c only specifies backslash commands in their basic form (without modifiers). (\dS actually autocompletes to \ds to my surprise) > I can do a more thorough review of the code when you add the > documentation and tests to the patch. I noticed that the pattern parameter in listConnectionInformation is unused. exec_command_conninfo scans the pattern but \conninfo should not accept any argument. So the pattern can be removed entirely. -- Erik
Re: Psql meta-command conninfo+
On 08.02.24 16:50, Maiquel Grassi wrote: > Hi Jim, > Thank you for your support on this patch! > As I believe in its usability, I have been dedicating efforts to make > it really interesting. > I hadn't thought about the permissioning issue for > "unix_socket_directories". I appreciate that. > I thought about solving this situation using the same approach as > \conninfo. I added the validation if (is_unixsock_path(host) && > !(hostaddr && *hostaddr)) in the SQL part along with an "append". In > case of a negative result, another "append" adds NULL. > Regarding the whitespace issue, before generating v8 patch file, I > used pgindent to adjust each modified file. I believe it should be ok > now. If you could verify, I'd be grateful. > Below are the tests after adjusting for the permissioning issues: > > [postgres@localhost bin]$ ./psql > psql (17devel) > Type "help" for help. > > postgres=# \conninfo > You are connected to database "postgres" as user "postgres" via socket > in "/tmp" at port "5432". > postgres=# \conninfo+ > > Current Connection Information > Database | Authenticated User | System User | Current User | Session > User | Session PID | Server Version | Server Address | Server Port | > Client Address | Client Port | Socket Directory | Host > --++-+--+--+-+++-++-+--+-- > postgres | postgres | | postgres | postgres > | 31479 | 17devel | | 5432 | > | | /tmp | > (1 row) > > postgres=# CREATE USER maiquel; > CREATE ROLE > postgres=# \q > [postgres@localhost bin]$ ./psql -U maiquel -d postgres > psql (17devel) > Type "help" for help. > > postgres=> \conninfo > You are connected to database "postgres" as user "maiquel" via socket > in "/tmp" at port "5432". > postgres=> \conninfo+ > > Current Connection Information > Database | Authenticated User | System User | Current User | Session > User | Session PID | Server Version | Server Address | Server Port | > Client Address | Client Port | Socket Directory | Host > --++-+--+--+-+++-++-+--+-- > postgres | maiquel | | maiquel | maiquel > | 31482 | 17devel | | 5432 | > | | /tmp | > (1 row) > > postgres=> \q > [postgres@localhost bin]$ ./psql -h localhost -U maiquel -d postgres > psql (17devel) > Type "help" for help. > > postgres=> \conninfo > You are connected to database "postgres" as user "maiquel" on host > "localhost" (address "::1") at port "5432". > postgres=> \conninfo+ > > Current Connection Information > Database | Authenticated User | System User | Current User | Session > User | Session PID | Server Version | Server Address | Server Port | > Client Address | Client Port | Socket Directory | Host > --++-+--+--+-+++-++-+--+--- > postgres | maiquel | | maiquel | maiquel > | 31485 | 17devel | ::1 | 5432 | > ::1 | 47482 | | localhost > (1 row) > > postgres=> \q > [postgres@localhost bin]$ ./psql -h localhost > psql (17devel) > Type "help" for help. > > postgres=# \conninfo > You are connected to database "postgres" as user "postgres" on host > "localhost" (address "::1") at port "5432". > postgres=# \conninfo+ > > Current Connection Information > Database | Authenticated User | System User | Current User | Session > User | Session PID | Server Version | Server Address | Server Port | > Client Address | Client Port | Socket Directory | Host > --++-+--+--+-+++-++-+--+--- > postgres | postgres | | postgres | postgres > | 31488 | 17devel | ::1 | 5432 | > ::1 | 47484 | | localhost > (1 row) > > Regards, > Maiquel. v8 no longer throws a permission denied error for non-superusers - it is IMHO much nicer this way. $ /usr/local/postgres-dev/bin/psql
RE: Psql meta-command conninfo+
> On 07.02.24 21:13, Maiquel Grassi wrote: >> >> I believe in v7 patch we have a quite substantial meta-command feature. >> >> > Thanks for implementing this. I find it very handy. > > I was just wondering if a "permission denied" error for non-superusers > is the best choice for "\conninfo+": > > postgres=> \conninfo+ > ERROR: permission denied to examine "unix_socket_directories" > DETAIL: Only roles with privileges of the "pg_read_all_settings" role > may examine this parameter. > > .. since it is not the case with "\conninfo": > > postgres=> \conninfo > You are connected to database "postgres" as user "jim" via socket in > "/tmp" at port "5432". > > Perhaps excluding the column from the result set or returning NULL in > the affected columns would be less confusing? > > There are also some indentation issues in your patch: > > /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:142: > indent with spaces. > PGresult *res; > /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:143: > indent with spaces. > PQExpBufferData buf; > /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:144: > indent with spaces. > printQueryOpt myopt = pset.popt; > /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:146: > indent with spaces. > initPQExpBuffer(); > /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:148: > indent with spaces. > printfPQExpBuffer(, > warning: squelched 34 whitespace errors > warning: 39 lines add whitespace errors. > > Looking forward to see the documentation and tests! --//-- Hi Jim, Thank you for your support on this patch! As I believe in its usability, I have been dedicating efforts to make it really interesting. I hadn't thought about the permissioning issue for "unix_socket_directories". I appreciate that. I thought about solving this situation using the same approach as \conninfo. I added the validation if (is_unixsock_path(host) && !(hostaddr && *hostaddr)) in the SQL part along with an "append". In case of a negative result, another "append" adds NULL. Regarding the whitespace issue, before generating v8 patch file, I used pgindent to adjust each modified file. I believe it should be ok now. If you could verify, I'd be grateful. Below are the tests after adjusting for the permissioning issues: [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory | Host --++-+--+--+-+++-++-+--+-- postgres | postgres | | postgres | postgres | 31479 | 17devel|| 5432|| | /tmp | (1 row) postgres=# CREATE USER maiquel; CREATE ROLE postgres=# \q [postgres@localhost bin]$ ./psql -U maiquel -d postgres psql (17devel) Type "help" for help. postgres=> \conninfo You are connected to database "postgres" as user "maiquel" via socket in "/tmp" at port "5432". postgres=> \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory | Host --++-+--+--+-+++-++-+--+-- postgres | maiquel| | maiquel | maiquel | 31482 | 17devel|| 5432|| | /tmp | (1 row) postgres=> \q [postgres@localhost bin]$ ./psql -h localhost -U maiquel -d postgres psql (17devel) Type "help" for help. postgres=> \conninfo You are connected to database "postgres" as user "maiquel" on host "localhost" (address "::1") at port "5432". postgres=> \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory | Host
RE: Psql meta-command conninfo+
> Hi, > On 07.02.2024 23:13, Maiquel Grassi wrote: > Regarding the "system_user" function, as it is relatively new, I added > the necessary handling to avoid conflicts with versions lower than version 16. > Yes, that's rights. > > A couple of doubts about the implementation details. > But keep in mind that I'm not very good at programming in the C language. > I hope for the help of more experienced developers. > > > 1. > + if (db == NULL) > + printf(_("You are currently not connected to a > database.\n")); > > This check is performed for \conninfo, but not for \conninfo+. > > > 2. > Some values (address, socket) are evaluated separately for \conninfo > (via C functions) and for \conninfo+ (via sql functions). > It may be worth evaluating them in one place. But I'm not sure about that. > > The final version of the patch will require changes to the documentation and > tests. --//-- Hi Pavel, First of all, thank you very much for your observations. 1. The connection check for the case of \conninfo+ is handled by "describe.c" itself since it deals with queries. I might be mistaken, but I believe that by using "printQuery()" via "describe.c", this is already ensured, and there is no need to evaluate the connection status. 2. I believe that by implementing the evaluations separately as they are, it becomes easier to perform future maintenance by minimizing the mixing of C code with SQL code as much as possible. However, certainly, the possibility of a better suggestion than mine remains open. Regards, Maiquel O. Grassi.
Re: Psql meta-command conninfo+
Hi Maiquel On 07.02.24 21:13, Maiquel Grassi wrote: > > I believe in v7 patch we have a quite substantial meta-command feature. > > Thanks for implementing this. I find it very handy. I was just wondering if a "permission denied" error for non-superusers is the best choice for "\conninfo+": postgres=> \conninfo+ ERROR: permission denied to examine "unix_socket_directories" DETAIL: Only roles with privileges of the "pg_read_all_settings" role may examine this parameter. .. since it is not the case with "\conninfo": postgres=> \conninfo You are connected to database "postgres" as user "jim" via socket in "/tmp" at port "5432". Perhaps excluding the column from the result set or returning NULL in the affected columns would be less confusing? There are also some indentation issues in your patch: /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:142: indent with spaces. PGresult *res; /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:143: indent with spaces. PQExpBufferData buf; /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:144: indent with spaces. printQueryOpt myopt = pset.popt; /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:146: indent with spaces. initPQExpBuffer(); /home/jim/Downloads/v7-0001-psql-meta-command-conninfo-plus.patch:148: indent with spaces. printfPQExpBuffer(, warning: squelched 34 whitespace errors warning: 39 lines add whitespace errors. Looking forward to see the documentation and tests! -- Jim
Re: Psql meta-command conninfo+
Hi, On 07.02.2024 23:13, Maiquel Grassi wrote: Regarding the "system_user" function, as it is relatively new, I added the necessary handling to avoid conflicts with versions lower than version 16. Yes, that's rights. A couple of doubts about the implementation details. But keep in mind that I'm not very good at programming in the C language. I hope for the help of more experienced developers. 1. + if (db == NULL) + printf(_("You are currently not connected to a database.\n")); This check is performed for \conninfo, but not for \conninfo+. 2. Some values (address, socket) are evaluated separately for \conninfo (via C functions) and for \conninfo+ (via sql functions). It may be worth evaluating them in one place. But I'm not sure about that. The final version of the patch will require changes to the documentation and tests. -- Pavel Luzanov Postgres Professional:https://postgrespro.com
RE: Psql meta-command conninfo+
> Hi, Maiquel! > > On 07.02.2024 17:47, Maiquel Grassi wrote: > "Also, it seems that the verbose parameter in the listConnectionInformation > is unnecessary." > Could you point out exactly the line or code snippet you are referring to? > +bool > +listConnectionInformation(const char *pattern, bool verbose) > > I mean that parameter verbose is not used in the function body and > listConnectionInformation called only in verbose mode. --//-- There really was no need for the bool verbose. Therefore, it was removed. Regarding the "system_user" function, as it is relatively new, I added the necessary handling to avoid conflicts with versions lower than version 16. I believe in v7 patch we have a quite substantial meta-command feature. I validated the "System User" column for three versions. This way, we have a sample: [postgres@localhost bin]$ ./psql -h 192.168.0.5 -p 5432 -U postgres -d postgres psql (17devel, server 14.3) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "192.168.0.5" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory |Host --++--+--+-+++-++-+--+- postgres | postgres | postgres | postgres |9008 | 14.3 | 192.168.0.5| 5432| 192.168.0.5| 63631 | | 192.168.0.5 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h 192.168.0.5 -p 5433 -U postgres -d postgres psql (17devel, server 16.1) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "192.168.0.5" at port "5433". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory |Host --++-+--+--+-+++-++-+--+- postgres | postgres | | postgres | postgres | 3348 | 16.1 | 192.168.0.5| 5433| 192.168.0.5| 63633 | | 192.168.0.5 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | System User | Current User | Session User | Session PID | Server Version | Server Address | Server Port | Client Address | Client Port | Socket Directory | Host --++-+--+--+-+++-++-+--+--- postgres | postgres | | postgres | postgres | 26147 | 17devel| ::1| 5432| ::1| 47466 | /tmp | localhost (1 row) Regards, Maiquel O. Grassi. v7-0001-psql-meta-command-conninfo-plus.patch Description: v7-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
Hi,Maiquel! On 07.02.2024 17:47, Maiquel Grassi wrote: "Also, it seems that the verbose parameter in the listConnectionInformation is unnecessary." Could you point out exactly the line or code snippet you are referring to? +bool +listConnectionInformation(const char *pattern,*bool verbose*) I mean that parameter verbose is not used in the function body and listConnectionInformation called only in verbose mode. -- Pavel Luzanov Postgres Professional:https://postgrespro.com
RE: Psql meta-command conninfo+
This is a good idea about extended connection info. On 07.02.2024 07:13, Maiquel Grassi wrote: SELECT ... current_user AS "User", This will be inconsistent with \conninfo. \conninfo returns authenticated user (PQuser), not the current_user. It might be worth showing current_user, session_user, and authenticated user, but I can't find the appropriate sql function for PQuser. What about to include system_user function? It shows useful authentication details. Also, it seems that the verbose parameter in the listConnectionInformation is unnecessary. --//-- Hi, Tks Pavel. Analyzing the functions' code more thoroughly, it seems to make more sense. I liked your suggestions and implemented them for validation. Regarding "system_user," I believe it is valid and also added it to the row. "Also, it seems that the verbose parameter in the listConnectionInformation is unnecessary." Could you point out exactly the line or code snippet you are referring to? To print the string from the "Authenticated User" column, I chose to use PQuser(pset.db) directly. I did the same for the "Host" column, opting for PQhost(pset.db). This does not contradict the result of \conninfo. Here are the tests as usual, and v6 patch. [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | Current User | Session User | System User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --++--+--+-+++-++-+-+--+-- postgres | postgres | postgres | postgres | | 17devel|| 5432|| | 17240 | /tmp | (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h ::1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "::1" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | Current User | Session User | System User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --++--+--+-+++-++-+-+--+-- postgres | postgres | postgres | postgres | | 17devel| ::1| 5432| ::1| 47024 | 17242 | /tmp | ::1 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | Current User | Session User | System User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --++--+--+-+++-++-+-+--+--- postgres | postgres | postgres | postgres | | 17devel| 127.0.0.1 | 5432| 127.0.0.1 | 35076 | 17245 | /tmp | 127.0.0.1 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information Database | Authenticated User | Current User | Session User | System User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --++--+--+-+++-++-+-+--+--- postgres | postgres | postgres | postgres | | 17devel| ::1| 5432| ::1| 47028 |
RE: Psql meta-command conninfo+
On 2024-02-07 05:13 +0100, Maiquel Grassi wrote: > On Tue, Feb 06, 2024 at 09:45:54PM +, 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"; --//-- There really was no need for the CASES. However, they helped visualize the psql output since for the null value, no word is printed on the screen. I made the adjustment by removing this redundancy. Regarding the "Host" column, the most reliable way to solve this, I believe, is by using the "host" variable. So it's necessary to declare char *host = PQhost(pset.db); in listConnectionInformation() and use it in the SQL (see patch v5). This way, we have the same return from \conninfo reliably. Once again, I ran a series of tests. [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++-++-+-+--+-- postgres | postgres | 17devel|| 5432| | | 15898 | /tmp | (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Server Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++-++-+-+--+--- postgres | postgres | 17devel| ::1| 5432| ::1 | 47012 | 15900 | /tmp | localhost (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h ::1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "::1" at port "5432". postgres=# \conninfo+
Re: Psql meta-command conninfo+
This is a good idea about extended connection info. On 07.02.2024 07:13, Maiquel Grassi wrote: SELECT ... current_user AS "User", This will be inconsistent with \conninfo. \conninfo returns authenticated user (PQuser), not the current_user. It might be worth showing current_user, session_user, and authenticated user, but I can't find the appropriate sql function for PQuser. What about to include system_user function? It shows useful authentication details. Also, it seems that the verbose parameter in the listConnectionInformation is unnecessary. -- Pavel Luzanov Postgres Professional:https://postgrespro.com
Re: Psql meta-command conninfo+
On 2024-02-07 05:13 +0100, Maiquel Grassi wrote: > On Tue, Feb 06, 2024 at 09:45:54PM +, 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
RE: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 09:45:54PM +, 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", 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", 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", 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' ELSE pg_catalog.inet_server_addr()::text END AS "Host"; See below the tests: [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++--++-+-+--+-- postgres | postgres | 17devel| NULL | 5432 | NULL | NULL| 14348 | /tmp | NULL (1 row) [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++--++-+-+--+--- postgres | postgres | 17devel| ::1/128| 5432 | ::1/128 | 46988 | 14353 | /tmp | localhost (1 row) [postgres@localhost bin]$ ./psql -h ::1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "::1" at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++--++-+-+--+--- postgres | postgres | 17devel| ::1/128| 5432 | ::1/128 | 46990 | 14356 | /tmp | localhost (1 row) [postgres@localhost bin]$ ./psql -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5432". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID | Socket Directory | Host --+--+++--++-+-+--+--- postgres | postgres | 17devel| 127.0.0.1/32 | 5432 | 127.0.0.1/32 | 35042 | 14359 | /tmp | localhost (1 row) [postgres@localhost bin]$ ./psql -h 192.168.0.5 -p 5433 -U postgres -d postgres psql (17devel, server 16.1) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "192.168.0.5" at port "5433". postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID
Re: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 09:45:54PM +, 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. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
RE: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 03:06:05PM -0600, Nathan Bossart wrote: > On Tue, Feb 06, 2024 at 08:52:09PM +, Maiquel Grassi wrote: >> I made the adjustment in the code and updated the patch. I believe this >> is the format suggested by you all. Would this be it? > > I was thinking something more like > > SELECT pg_catalog.current_database() AS "Database", > current_user AS "User", > pg_catalog.current_setting('server_version') AS "Server Version", > pg_catalog.inet_server_addr() AS "Server Address", > pg_catalog.current_setting('port') AS "Port", > pg_catalog.inet_client_addr() AS "Client Address", > pg_catalog.inet_client_port() AS "Client Port", > pg_catalog.pg_backend_pid() AS "Session PID"; ... although that seems to be missing items like the socket directory and the host. --//-- 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. Regards, Maiquel O. Grassi.
RE: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 08:52:09PM +, Maiquel Grassi wrote: > I made the adjustment in the code and updated the patch. I believe this > is the format suggested by you all. Would this be it? I was thinking something more like SELECT pg_catalog.current_database() AS "Database", current_user AS "User", pg_catalog.current_setting('server_version') AS "Server Version", pg_catalog.inet_server_addr() AS "Server Address", pg_catalog.current_setting('port') AS "Port", pg_catalog.inet_client_addr() AS "Client Address", pg_catalog.inet_client_port() AS "Client Port", pg_catalog.pg_backend_pid() AS "Session PID"; --//-- Good, I had misunderstood. I liked this adjustment. Now it truly aligns with the central idea of the other extended meta-commands. [postgres@localhost bin]$ ./psql -h 192.168.0.220 -p 5433 -U postgres -d postgres psql (17devel, server 16.1) Type "help" for help. postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID --+--+++--++-+- postgres | postgres | 16.1 | 192.168.0.220 | 5433 | 192.168.0.220 | 57112 | 22120 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID --+--+++--++-+- postgres | postgres | 17devel|| 5432 | | | 31430 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID --+--+++--++-+- postgres | postgres | 17devel| ::1| 5432 | ::1 | 46918 | 31433 (1 row) postgres=# \q [postgres@localhost bin]$ ./psql -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo+ Current Connection Information Database | User | Server Version | Server Address | Port | Client Address | Client Port | Session PID --+--+++--++-+- postgres | postgres | 17devel| 127.0.0.1 | 5432 | 127.0.0.1 | 34970 | 31435 (1 row) Regards, Maiquel O. Grassi. v3-0001-psql-meta-command-conninfo-plus.patch Description: v3-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 03:06:05PM -0600, Nathan Bossart wrote: > On Tue, Feb 06, 2024 at 08:52:09PM +, Maiquel Grassi wrote: >> I made the adjustment in the code and updated the patch. I believe this >> is the format suggested by you all. Would this be it? > > I was thinking something more like > > SELECT pg_catalog.current_database() AS "Database", > current_user AS "User", > pg_catalog.current_setting('server_version') AS "Server Version", > pg_catalog.inet_server_addr() AS "Server Address", > pg_catalog.current_setting('port') AS "Port", > pg_catalog.inet_client_addr() AS "Client Address", > pg_catalog.inet_client_port() AS "Client Port", > pg_catalog.pg_backend_pid() AS "Session PID"; ... although that seems to be missing items like the socket directory and the host. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Re: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 08:52:09PM +, Maiquel Grassi wrote: > I made the adjustment in the code and updated the patch. I believe this > is the format suggested by you all. Would this be it? I was thinking something more like SELECT pg_catalog.current_database() AS "Database", current_user AS "User", pg_catalog.current_setting('server_version') AS "Server Version", pg_catalog.inet_server_addr() AS "Server Address", pg_catalog.current_setting('port') AS "Port", pg_catalog.inet_client_addr() AS "Client Address", pg_catalog.inet_client_port() AS "Client Port", pg_catalog.pg_backend_pid() AS "Session PID"; -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
RE: Psql meta-command conninfo+
On 2024-02-06 19:19 +0100, Nathan Bossart wrote: > On Tue, Feb 06, 2024 at 05:27:01PM +, Maiquel Grassi wrote: > > postgres=# \conninfo+ > > Current Connection Information > >Attribute| Value > > + > > Database | postgres > > User | postgres > > Server Version | 16.1 > > Server Address | 192.168.0.5/32 > > Server Port| 5433 > > Client Address | 192.168.0.5/32 > > Client Port| 52716 > > Session PID| 21624 > > (8 rows) > > My first reaction is that this should instead return a single row with the > same set of columns for any connection type (the not-applicable ones would > just be set to NULL). That would match the other meta-commands like \l and > \du, and you could still get an expanded display with \x if needed. Also, > I think it would simplify the code a bit. +1 for a single-row result and triggering expanded display with \x for consistency with other commands. --//-- I made the adjustment in the code and updated the patch. I believe this is the format suggested by you all. Would this be it? [postgres@localhost bin]$ ./psql -h 192.168.0.220 -p 5433 -U postgres -d postgres psql (17devel, server 16.1) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "192.168.0.220" at port "5433". postgres=# \conninfo+ Current Connection Information Attribute| Value +-- Database | postgres User | postgres Server Version | 16.1 Server Address | 192.168.0.220/32 Server Port| 5433 Client Address | 192.168.0.220/32 Client Port| 56606 Session PID| 2424 (8 rows) [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432". postgres=# \conninfo+ Current Connection Information Attribute| Value +-- Database | postgres User | postgres Server Version | 17devel Server Address | Server Port| 5432 Client Address | Client Port| Session PID| 30216 (8 rows) [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432". postgres=# \conninfo+ Current Connection Information Attribute| Value +-- Database | postgres User | postgres Server Version | 17devel Server Address | ::1/128 Server Port| 5432 Client Address | ::1/128 Client Port| 46872 Session PID| 30220 (8 rows) [postgres@localhost bin]$ ./psql -h 127.0.0.1 psql (17devel) Type "help" for help. postgres=# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.0.1" at port "5432". postgres=# \conninfo+ Current Connection Information Attribute|Value +-- Database | postgres User | postgres Server Version | 17devel Server Address | 127.0.0.1/32 Server Port| 5432 Client Address | 127.0.0.1/32 Client Port| 34924 Session PID| 30223 (8 rows) Regards, Maiquel O. Grassi. v2-0001-psql-meta-command-conninfo-plus.patch Description: v2-0001-psql-meta-command-conninfo-plus.patch
Re: Psql meta-command conninfo+
On 2024-02-06 19:19 +0100, Nathan Bossart wrote: > On Tue, Feb 06, 2024 at 05:27:01PM +, Maiquel Grassi wrote: > > postgres=# \conninfo+ > > Current Connection Information > >Attribute| Value > > + > > Database | postgres > > User | postgres > > Server Version | 16.1 > > Server Address | 192.168.0.5/32 > > Server Port| 5433 > > Client Address | 192.168.0.5/32 > > Client Port| 52716 > > Session PID| 21624 > > (8 rows) > > My first reaction is that this should instead return a single row with the > same set of columns for any connection type (the not-applicable ones would > just be set to NULL). That would match the other meta-commands like \l and > \du, and you could still get an expanded display with \x if needed. Also, > I think it would simplify the code a bit. +1 for a single-row result and triggering expanded display with \x for consistency with other commands. -- Erik
Re: Psql meta-command conninfo+
On Tue, Feb 06, 2024 at 05:27:01PM +, Maiquel Grassi wrote: > I'm seeking to improve the \conninfo meta-command in psql. Currently, it > provides limited information about the current connection. I believe that > expanding it using the concept of "plus" [+] could ease the work of DBAs, > SysAdmins, DevOps, etc., who manage a large volume of databases and/or > multiple PostgreSQL servers. The objective of this enhancement is to > obtain quick information about the current connection (session). I > believe that for a PostgreSQL administrator, it is not feasible to write > a plpgsql function and apply it to all databases (for example, imagine > managing over 200 databases). I have an example on GitHub > https://github.com/maiquelgrassi/DBA-toolkit/blob/main/cluster/dba_whoami_function.sql > of a plpgsql function demonstrating exactly what I believe is impractical > for the daily routine of a PostgreSQL professional. I see psql's > meta-commands as significant allies in daily work in productive > environments. This seems like a reasonable idea to me. > postgres=# \conninfo+ > Current Connection Information >Attribute| Value > + > Database | postgres > User | postgres > Server Version | 16.1 > Server Address | 192.168.0.5/32 > Server Port| 5433 > Client Address | 192.168.0.5/32 > Client Port| 52716 > Session PID| 21624 > (8 rows) My first reaction is that this should instead return a single row with the same set of columns for any connection type (the not-applicable ones would just be set to NULL). That would match the other meta-commands like \l and \du, and you could still get an expanded display with \x if needed. Also, I think it would simplify the code a bit. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com