Обсуждение: psql: Is it possible to run a query from a *sql file?
[Running PG 7.4.7-5 on GNU-Linux Debian Sarge]
Hi all,
I'm wondering if it is possible to run a query from a .sql file, so as
to automate certain searches from console.
I've been unsuccessfully trying something like this simple one:
------------
\! echo "insert key: ";read key; export $key;
SELECT autore, titolo, editore FROM bibl WHERE autore like '%[$key]%'
------------
Most likely the answer is 'no', as psql is an 'interactive'
application.
There seems to be no communication between the shell (where you digit
the key) and psql: the key vanishes somewhere ... ;(
Regards,
Ennio
BTW: Somebody knows where does pgaccess store its queries?
--
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo. \\?//
Fa' qualche cosa di cui non sei capace!" (diceva Henry Miller) ] (°|°)
[Why use Win$ozz (I say) if ... "even a fool can do that. )=(
Do something you aren't good at!" (as Henry Miller used to say) ]
Ennio-Sr <nasr.laili@tin.it> writes:
> I've been unsuccessfully trying something like this simple one:
> \! echo "insert key: ";read key; export $key;
> SELECT autore, titolo, editore FROM bibl WHERE autore like '%[$key]%'
Perhaps you want something like
regression=# \echo prompt
prompt
regression=# \set foo `read val; echo "'$val'"`
qwerty
regression=# select :foo;
?column?
----------
qwerty
(1 row)
although on the whole I think you'd be better off turning this around:
write it as a shell script and invoke psql for individual steps,
rather than the other way round. It's hard to envision a script that
needs user interaction and won't shortly thereafter need control
structures etc.
regards, tom lane
* Tom Lane <tgl@sss.pgh.pa.us> [010505, 13:24]:
> Ennio-Sr <nasr.laili@tin.it> writes:
> > I've been unsuccessfully trying something like this simple one:
> [...]
>
> Perhaps you want something like
> [...]
> regression=# \set foo `read val; echo "'$val'"`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
That as it!
> [...]
> although on the whole I think you'd be better off turning this around:
> write it as a shell script and invoke psql for individual steps,
> rather than the other way round. It's hard to envision a script that
> needs user interaction and won't shortly thereafter need control
> structures etc.
>
> regards, tom lane
Hi Tom,
thanks for your quick and helpful answer.
I've already some nice shell scripts that work wonderfully; I was just
trying to learn a litte bit more about the use of the \i file.sql.
Your explanation helped me understand the whereabouts :-)
As an example, this works perfectly now:
# op_srch.sql (called from within psql with command => \i op_srch.sql:
-------------------
\echo Insert search Filed and Key: ;
\set fld `read fld; echo "$fld"`
\set key `read key; echo "'%$key%'"`
\echo :fld
\echo :key
SELECT autore, titolo, editore FROM bibl WHERE unaccent(lower(:fld))
like lower(:key);
-------------------
Thanks again.
All the best,
Ennio.
--
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo. \\?//
Fa' qualche cosa di cui non sei capace!" (diceva Henry Miller) ] (°|°)
[Why use Win$ozz (I say) if ... "even a fool can do that. )=(
Do something you aren't good at!" (as Henry Miller used to say) ]
* Tom Lane <tgl@sss.pgh.pa.us> [010505, 13:24]:
> rather than the other way round. It's hard to envision a script that
> needs user interaction and won't shortly thereafter need control
^^^^^^^^^^^^
> structures etc.
^^^^^^^^^^^^^^^
Sorry! I forgot to ask it in my previous answer:
What does that exactly mean?
Where can I read for a better understanding?
Regards, Ennio.
--
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo. \\?//
Fa' qualche cosa di cui non sei capace!" (diceva Henry Miller) ] (°|°)
[Why use Win$ozz (I say) if ... "even a fool can do that. )=(
Do something you aren't good at!" (as Henry Miller used to say) ]
On Mon, May 02, 2005 at 02:38:39 +0200, Ennio-Sr <nasr.laili@tin.it> wrote: > * Tom Lane <tgl@sss.pgh.pa.us> [010505, 13:24]: > > > rather than the other way round. It's hard to envision a script that > > needs user interaction and won't shortly thereafter need control > ^^^^^^^^^^^^ > > structures etc. > ^^^^^^^^^^^^^^^ > Sorry! I forgot to ask it in my previous answer: > What does that exactly mean? > Where can I read for a better understanding? > Regards, Ennio. Statements that provide for conditional and repeated execution of other statements. psql dosn't have that, but your shell almost certainly does.