Thread: Order of execution in shell echo to psql

Order of execution in shell echo to psql

From
John Gage
Date:
I issue the following command to the shell:

echo '\o file.txt \\ select * from table_name limit 10  \o ' | psql --
host 'localhost' --port 5432 --username 'johngage' 'database_name'

I expect the results to be redirected to file.txt because that is the
meta-command immediately preceeding the query.

In fact, the results go to stdout, obviously on account of the \o at
the end of the query.  And, equally obviously, I can leave that out
(which "works").

But I am surprised that the \o is the controlling meta-command.

Thanks,

John

Re: Order of execution in shell echo to psql

From
David W Noon
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sun, 2 May 2010 14:13:52 +0200, John Gage wrote abour [GENERAL]
Order of execution in shell echo to psql:

>I issue the following command to the shell:
>
>echo '\o file.txt \\ select * from table_name limit 10  \o ' | psql -- 
>host 'localhost' --port 5432 --username 'johngage' 'database_name'

Try putting a semi-colon at the end of your SQL query.  [Or try using
proper copy-and-paste when writing your messages.]
- -- 
Regards,

Dave  [RLU #314465]
======================================================================
dwnoon@ntlworld.com (David W Noon)
======================================================================
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)

iEYEARECAAYFAkvdeiwACgkQRQ2Fs59Psv/1FQCgw+m+tBm+5VtnMPFrMn+q6xnV
gwMAoNIHaCb3vVSyu35w8aJ9IZfmKV6g
=vnpA
-----END PGP SIGNATURE-----

Re: Order of execution in shell echo to psql

From
Tom Lane
Date:
David W Noon <dwnoon@ntlworld.com> writes:
> On Sun, 2 May 2010 14:13:52 +0200, John Gage wrote abour [GENERAL]
>> I issue the following command to the shell:
>>
>> echo '\o file.txt \\ select * from table_name limit 10  \o ' | psql --
>> host 'localhost' --port 5432 --username 'johngage' 'database_name'

> Try putting a semi-colon at the end of your SQL query.

Or put a \g there.  As it stands, execution of the SQL query is
triggered by the EOF at the end of the string.  So the fact that the
second \o got executed before that is unsurprising.

            regards, tom lane

Re: Order of execution in shell echo to psql

From
John Gage
Date:
Thanks very much for elucidating this.  \g is going to help me in this
situation more than the ;

John


On May 2, 2010, at 4:25 PM, Tom Lane wrote:

> David W Noon <dwnoon@ntlworld.com> writes:
>> On Sun, 2 May 2010 14:13:52 +0200, John Gage wrote abour [GENERAL]
>>> I issue the following command to the shell:
>>>
>>> echo '\o file.txt \\ select * from table_name limit 10  \o ' |
>>> psql --
>>> host 'localhost' --port 5432 --username 'johngage' 'database_name'
>
>> Try putting a semi-colon at the end of your SQL query.
>
> Or put a \g there.  As it stands, execution of the SQL query is
> triggered by the EOF at the end of the string.  So the fact that the
> second \o got executed before that is unsurprising.
>
>             regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general