Обсуждение: pg_cron for vacuum - dynamic table set

Поиск
Список
Период
Сортировка

pg_cron for vacuum - dynamic table set

От
saket bansal
Дата:
Hi, I am trying to schedule pg_cron to generate a set of commands and then run them. E.g select 'vacuum freeze '||table_name from inventory_for_vacuum \gexec . This works well at command line, but when scheduled in pg_cron, it fails with syntax error ERROR: syntax error at or near "\" .
Since vacuum doesn't work inside a transaction block ERROR: VACUUM cannot run inside a transaction block, I cannot use a function directly to run over a loop.
Any guidance to make it work or an alternative?


Re: pg_cron for vacuum - dynamic table set

От
Adrian Klaver
Дата:
On 2/3/22 1:29 PM, saket bansal wrote:
> Hi, I am trying to schedule pg_cron to generate a set of commands and 
> then run them. E.g |select 'vacuum freeze '||table_name from 
> inventory_for_vacuum \gexec| . This works well at command line, but when 
> scheduled in pg_cron, it fails with syntax error |ERROR: syntax error at 
> or near "\"| .

\gexec is a psql metacommand and will only run in that client.

I'm guessing that is not the case in the pg_cron task?

> Since vacuum doesn't work inside a transaction block |ERROR: VACUUM 
> cannot run inside a transaction block|, I cannot use a function directly 
> to run over a loop.
> Any guidance to make it work or an alternative?
> 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



Re: pg_cron for vacuum - dynamic table set

От
"David G. Johnston"
Дата:
On Thu, Feb 3, 2022 at 2:29 PM saket bansal <saket.tcs@gmail.com> wrote:
Hi, I am trying to schedule pg_cron to generate a set of commands and then run them. E.g select 'vacuum freeze '||table_name from inventory_for_vacuum \gexec . This works well at command line, but when scheduled in pg_cron, it fails with syntax error ERROR: syntax error at or near "\" .

Right, because you don't get to use psql meta-commands if you are not using psql.

Since vacuum doesn't work inside a transaction block ERROR: VACUUM cannot run inside a transaction block, I cannot use a function directly to run over a loop.
Any guidance to make it work or an alternative?

Have a pg_cron job that dynamically creates other pg_cron jobs that only run once?

David J.

Re: pg_cron for vacuum - dynamic table set

От
Michael Lewis
Дата:
Can't you use a do script to construct and execute the statement?

Re: pg_cron for vacuum - dynamic table set

От
Ron
Дата:
On 2/3/22 3:29 PM, saket bansal wrote:
Hi, I am trying to schedule pg_cron to generate a set of commands and then run them. E.g select 'vacuum freeze '||table_name from inventory_for_vacuum \gexec . This works well at command line, but when scheduled in pg_cron, it fails with syntax error ERROR: syntax error at or near "\" .
Since vacuum doesn't work inside a transaction block ERROR: VACUUM cannot run inside a transaction block, I cannot use a function directly to run over a loop.
Any guidance to make it work or an alternative?

What about running the command from regular cron?

--
Angular momentum makes the world go 'round.