pg_cron for vacuum - dynamic table set

Started by saket bansalabout 4 years ago5 messagesgeneral
Jump to latest
#1saket bansal
saket.tcs@gmail.com

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?

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: saket bansal (#1)
Re: pg_cron for vacuum - dynamic table set

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

#3David G. Johnston
david.g.johnston@gmail.com
In reply to: saket bansal (#1)
Re: pg_cron for vacuum - dynamic table set

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.

#4Michael Lewis
mlewis@entrata.com
In reply to: David G. Johnston (#3)
Re: pg_cron for vacuum - dynamic table set

Can't you use a do script to construct and execute the statement?

Show quoted text
#5Ron
ronljohnsonjr@gmail.com
In reply to: saket bansal (#1)
Re: pg_cron for vacuum - dynamic table set

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.