Обсуждение: psql in 7.2devel loops

Поиск
Список
Период
Сортировка

psql in 7.2devel loops

От
John Summerfield
Дата:
It used to be the case that psql could be run thus:

psql -U summer -h numbat template1 <<ZZ
password
<commands>
ZZ

which is very convenient in scripting.

Now, it writes a password prompt (successfully in my case) and tries to
read the password (presumably from the tty) which fails.

Here is the entire script that fails for me:

#!/bin/bash
set -x
psql -U summer -h $HOSTNAME template1 <<zz
thisisnotthepassword
--\h create
drop DATABASE sharetrader;
CREATE DATABASE sharetrader;
zz

I ran this script from my console:
#!/bin/bash
(
  exec </dev/null
  (
    (
      cat <<zz
to: $USER@$HOSTNAME
cc: summer@$HOSTNAME
subject: postgresql build and test run `date`

zz
      set -x
      time pg.build
          time pg.setupdb
          pg.ss start
          time pg.test
          pg.ss stop
    ) 2>&1) \
          | /usr/sbin/sendmail -t &
)

Presumably opening the tty worked - there is stil a terminal associated
with the script.

The environment is Red Hat Linux 7.2, 2.4.17 kernel.

Re: psql in 7.2devel loops

От
Tom Lane
Дата:
John Summerfield <pgtest@ami.com.au> writes:
> It used to be the case that psql could [ read a password from stdin ]
> Now, it writes a password prompt (successfully in my case) and tries to
> read the password (presumably from the tty) which fails.

This was a deliberate change.  I wasn't that happy with it myself,
but I was outvoted.  You're gonna have to find another way; sorry.

I think "expect" was mentioned as one way of feeding passwords to
programs that will only talk to a tty.  On the whole, though, you'd
be better off not embedding passwords in scripts in the first place.
Consider rethinking your PG authorization strategy.  (On Linux,
at least, "ident" now works nicely across Unix sockets.)

            regards, tom lane