Обсуждение: 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.