Thread: gexec from command prompt?

gexec from command prompt?

From
Ron
Date:
Postgresql 12.11

This might be more of a bash question, or it might be a psql vs engine problem.

I want to run this query using psql from a bash prompt:
select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name, table_name)
from dba.table_structure
order by table_name\gexec

Thus, I added an extra back

$ psql sides -atXc "select format('SELECT ''%s'', MIN(part_date) FROM %s;', 
table_name, table_name) from dba.table_structure order by table_name limit 
5\\gexec"
select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name, 
table_name) from dba.table_structure order by table_name limit 5\gexec
ERROR:  syntax error at or near "\"
LINE 1: ...) from dba.table_structure order by table_name limit 5\gexec

Removing "\\exec" from the statement, and appending -c "\\gexec" to the psql 
command technically worked, but did not run the commands.

-- 
Born in Arizona, moved to Babylonia.



Re: gexec from command prompt?

From
Pavel Stehule
Date:


čt 12. 1. 2023 v 18:25 odesílatel Ron <ronljohnsonjr@gmail.com> napsal:
Postgresql 12.11

This might be more of a bash question, or it might be a psql vs engine problem.

I want to run this query using psql from a bash prompt:
select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name, table_name)
from dba.table_structure
order by table_name\gexec

Thus, I added an extra back

$ psql sides -atXc "select format('SELECT ''%s'', MIN(part_date) FROM %s;',
table_name, table_name) from dba.table_structure order by table_name limit
5\\gexec"
select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name,
table_name) from dba.table_structure order by table_name limit 5\gexec
ERROR:  syntax error at or near "\"
LINE 1: ...) from dba.table_structure order by table_name limit 5\gexec

Removing "\\exec" from the statement, and appending -c "\\gexec" to the psql
command technically worked, but did not run the commands.

I don't know why, but \g* commands don't work from the -c option. But in this case it is not necessary

you can psql -c "xxx" | psql

Regards

Pavel
 

--
Born in Arizona, moved to Babylonia.


Re: gexec from command prompt?

From
Alvaro Herrera
Date:
On 2023-Jan-12, Ron wrote:

> Postgresql 12.11
> 
> This might be more of a bash question, or it might be a psql vs engine problem.
> 
> I want to run this query using psql from a bash prompt:
> select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name, table_name)
> from dba.table_structure
> order by table_name\gexec

Yeah, what I use in these cases is something like

echo "select format('SELECT ''%s'', MIN(part_date) FROM %s;', table_name, table_name)
from dba.table_structure
order by table_name \gexec" | psql -f-


-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
"El hombre nunca sabe de lo que es capaz hasta que lo intenta" (C. Dickens)



Re: gexec from command prompt?

From
"David G. Johnston"
Date:
On Thu, Jan 12, 2023 at 10:34 AM Pavel Stehule <pavel.stehule@gmail.com> wrote:

čt 12. 1. 2023 v 18:25 odesílatel Ron <ronljohnsonjr@gmail.com> napsal:

Removing "\\exec" from the statement, and appending -c "\\gexec" to the psql
command technically worked, but did not run the commands.

I don't know why, but \g* commands don't work from the -c option. But in this case it is not necessary


Well, the -c option states:

command must be either a command string that is completely parsable by the server (i.e., it contains no psql-specific features), or a single backslash command. Thus you cannot mix SQL and psql meta-commands within a -c option.

Thus any meta-command that interacts with server-parsed SQL is rendered useless in -c

David J.