Re: BUG #5978: Running postgress in a shell script fails - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #5978: Running postgress in a shell script fails
Date
Msg-id 25680.1302731416@sss.pgh.pa.us
Whole thread Raw
In response to BUG #5978: Running postgress in a shell script fails  ("Paul Deschamps" <pdescham49@gmail.com>)
List pgsql-bugs
"Paul Deschamps" <pdescham49@gmail.com> writes:
> PostgreSQL version: 8.4.6
> Operating system:   Ubuntu 10.4
> Description:        Running postgress in a shell script fails
> Details:

> When running postgres in a shell using the -c option it looks as though it
> parses the contents of the --command as command line arguments.

> Running Command:psql postgres -c"SELECT tablename FROM PG_TABLES limit 1;"
> TEST 1
> psql: warning: extra command-line argument "FROM" ignored
> psql: warning: extra command-line argument "PG_TABLES" ignored
> psql: warning: extra command-line argument "limit" ignored
> psql: warning: extra command-line argument "1;"" ignored
> psql: FATAL:  role "tablename" does not exist

I think this is a bug in Ubuntu's version of getopt_long(); it does not
happen that way for me on any of the platforms I use.  I get either

psql: FATAL:  role "-cSELECT tablename FROM PG_TABLES limit 1;" does not exist

on platforms where getopt_long does not think it has a charter to try to
rearrange command line arguments, or

$ psql postgres -c"SELECT tablename FROM PG_TABLES limit 1;"
  tablename
--------------
 pg_statistic
(1 row)

on platforms where getopt_long does move the database name after the
switch+argument.  What you've evidently got is a getopt_long that tries
to rearrange the command-line arguments but produces the equivalent of

psql "-cSELECT" "postgres" "tablename" "FROM" "PG_TABLES" "limit" "1;"

which is flat out wrong.

Recommendation is to use the documented command line order, which is

    psql [OPTION]... [DBNAME [USERNAME]]

rather than assuming getopt_long will fix it for you.

You can try filing a bug against Ubuntu's glibc, but I dunno whether
you'll get any satisfaction there.  I think we've heard of this before
and the misbehavior is of long standing.

            regards, tom lane

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #5974: UNION construct type cast gives poor error message
Next
From: "Kevin Grittner"
Date:
Subject: Re: BUG #5974: UNION construct type cast gives poor error message