Обсуждение: gexec from command prompt?
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.
č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.
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)
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.