BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

Started by Nonameover 8 years ago6 messagesbugs
Jump to latest
#1Noname
mhwood@ameritech.net

The following bug has been logged on the website:

Bug reference: 14912
Logged by: Mark Wood
Email address: mhwood@ameritech.net
PostgreSQL version: 9.6.6
Operating system: Gentoo Linux, kernel 4.12, glibc 2.25-r9
Description:

The 'psql' man page explains that the default database name is your OS
username, and that $PGDATABASE can be used to supply a different default.
That is true *unless* using -l / --list. The code shows that this option
defaults to 'postgresql' instead, overriding the libpq defaulting. I spent
quite some time reading and experimenting to determine why I was not seeing
the documented behavior.

The actual behavior may be reasonable, but if so it should be documented as
an exception for the --list function.

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Noname (#1)
Re: BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

On Thu, Nov 16, 2017 at 10:17 AM, <mhwood@ameritech.net> wrote:

The following bug has been logged on the website:

Bug reference: 14912
Logged by: Mark Wood
​[...]​

That is true *unless* using -l / --list. The code shows that this option
defaults to 'postgresql' instead, overriding the libpq defaulting.

​It actually defaults to "postgres"

​[...]​

The actual behavior may be reasonable, but if so it should be documented as
an exception for the --list function.

I can see an argument for either default, but given that this invocation
has never defaulted to the user's database I cannot see changing it.

I agree this should be considered a doc bug and back-patched. Possible
verbiage for master below and attached.

Changing the "Usage" section to point out this exception to the rule seems
undesirable.

David J.

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index e520cdf3ba..ad2a505b1e 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -283,7 +283,9 @@ EOF
       <listitem>
       <para>
       List all available databases, then exit. Other non-connection
-      options are ignored. This is similar to the meta-command
+      options are ignored. If an explicit database name is not
+      found the <literal>postgres</literal> database, not the user's,
+      will be targeted for connection. This is similar to the meta-command
       <command>\list</command>.
       </para>
       </listitem>

Attachments:

psql-list-command-dbname-fix.patchapplication/octet-stream; name=psql-list-command-dbname-fix.patchDownload+3-1
#3Bruce Momjian
bruce@momjian.us
In reply to: David G. Johnston (#2)
Re: BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

Patch applied and backpatched through PG 10. Thanks.

---------------------------------------------------------------------------

On Thu, Nov 16, 2017 at 02:27:06PM -0700, David G. Johnston wrote:

On Thu, Nov 16, 2017 at 10:17 AM, <mhwood@ameritech.net> wrote:

The following bug has been logged on the website:

Bug reference:      14912
Logged by:          Mark Wood
​[...]​

That is true *unless* using -l / --list.  The code shows that this option
defaults to 'postgresql' instead, overriding the libpq defaulting.

​It actually defaults to "postgres"

​[...]​
 

The actual behavior may be reasonable, but if so it should be documented as
an exception for the --list function.

I can see an argument for either default, but given that this invocation has
never defaulted to the user's database I cannot see changing it.

I agree this should be considered a doc bug and back-patched.  Possible
verbiage for master below and attached.

Changing the "Usage" section to point out this exception to the rule seems
undesirable.

David J.

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index e520cdf3ba..ad2a505b1e 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -283,7 +283,9 @@ EOF
       <listitem>
       <para>
       List all available databases, then exit. Other non-connection
-      options are ignored. This is similar to the meta-command
+      options are ignored. If an explicit database name is not
+      found the <literal>postgres</literal> database, not the user's,
+      will be targeted for connection. This is similar to the meta-command
       <command>\list</command>.
       </para>
       </listitem>
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index e520cdf3ba..ad2a505b1e 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -283,7 +283,9 @@ EOF
<listitem>
<para>
List all available databases, then exit. Other non-connection
-      options are ignored. This is similar to the meta-command
+      options are ignored. If an explicit database name is not
+      found the <literal>postgres</literal> database, not the user's,
+      will be targeted for connection. This is similar to the meta-command
<command>\list</command>.
</para>
</listitem>

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +
#4Peter Eisentraut
peter_e@gmx.net
In reply to: David G. Johnston (#2)
Re: BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

On 11/16/17 16:27, David G. Johnston wrote:

       List all available databases, then exit. Other non-connection
-      options are ignored. This is similar to the meta-command
+      options are ignored. If an explicit database name is not
+      found the <literal>postgres</literal> database, not the user's,
+      will be targeted for connection. This is similar to the meta-command
       <command>\list</command>.

What does "an explicit database name is not found" mean? How does one
find an explicit database name?

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#5David G. Johnston
david.g.johnston@gmail.com
In reply to: Peter Eisentraut (#4)
Re: BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

On Fri, Feb 2, 2018 at 2:49 PM, Peter Eisentraut <
peter.eisentraut@2ndquadrant.com> wrote:

On 11/16/17 16:27, David G. Johnston wrote:

List all available databases, then exit. Other non-connection
-      options are ignored. This is similar to the meta-command
+      options are ignored. If an explicit database name is not
+      found the <literal>postgres</literal> database, not the user's,
+      will be targeted for connection. This is similar to the

meta-command

<command>\list</command>.

What does "an explicit database name is not found" mean?

​A name was not supplied to the psql command either as the first non-option
argument, via the --dbname command line option, in the connection URI
(possibly indirectly via a pg_service.conf entry), or via the PGDATABASE
environment variable.

How does one

find an explicit database name?

Given the answer above does this question still apply?

David J.

#6Peter Eisentraut
peter_e@gmx.net
In reply to: David G. Johnston (#5)
Re: BUG #14912: Undocumented: 'psql -l' assumes database 'postgresql' not $USER

On 2/2/18 17:05, David G. Johnston wrote:

What does "an explicit database name is not found" mean?

​A name was not supplied to the psql command either as the first
non-option argument, via the --dbname command line option, in the
connection URI (possibly indirectly via a pg_service.conf entry), or via
the PGDATABASE environment variable.

OK, clarified that a bit further. Actually, an environment variable
does not take any effect for this.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services