Agendamento de tarefas de manutenção com o pg_cron
pg_cron é uma extensão do PostgreSQL que oferece agendamento de tarefas no banco de dados, permitindo que você automatize tarefas SQL sem depender de ferramentas externas. Para obter mais informações, consulte pg_cron.
A extensão pg_cron é compatível com a versão 13 e superior do site PostgreSQL.
Configurando pg_cron
-
Faça login no banco de dados ibmclouddb como usuário admin.
\c ibmclouddb -
Habilite a extensão
pg_cron.create extension pg_cron; -
Verifique se o site
pg_cronestá instalado.\dxpg_cronpode ser instalado somente em bancos de dados ibmclouddb e pode ser usado somente pelo usuário administrador devido a motivos de segurança atuais. -
Execute o seguinte comando para conceder privilégios para
pg_cron.select public.grant_pgcron_privileges();
Planejando tarefas
Use o site cron.schedule_in_database() para agendar seus trabalhos.
SELECT cron.schedule_in_database(
job_name text,
schedule text, -- cron expression
command text, -- SQL command to run
database_name text -- target database
);
- Para visualizar os trabalhos agendados:
select * from cron.job;
- Para visualizar os trabalhos de programação de status:
select * from cron.job_run_details;
- Para cancelar o agendamento de trabalhos:
ibmclouddb=> SELECT cron.unschedule(jobid);
unschedule
------------
t
(1 row)
Exemplo de uso pg_cron
- Faça login no banco de dados ibmclouddb:
\c ibmclouddb
- Habilite a extensão
pg_cron:
ibmclouddb=> \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
ibmclouddb=> create extension pg_cron;
CREATE EXTENSION
ibmclouddb=>
ibmclouddb=> \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
pg_cron | 1.6 | pg_catalog | Job scheduler for PostgreSQL
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
- Conceder privilégios para
pg_cron:
ibmclouddb=> select public.grant_pgcron_privileges();
grant_pgcron_privileges
--------------------------------
Granted permission on pg_cron
(1 row)
- Agendamento de um trabalho VACUUM para ser executado todos os domingos às 4:00 AM.
SELECT cron.schedule_in_database(
job_name text,
schedule text, -- cron expression
command text, -- SQL command to run
database_name text -- target database
);
ibmclouddb=> SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'test');
schedule_in_database
----------------------
35
(1 row)
- Para visualizar os trabalhos agendados:
ibmclouddb=> select * from cron.job;
jobid | schedule | command | nodename | nodeport | database | username | active | jobname
-------+-----------+---------+-----------+----------+----------+----------+--------+---------------
35 | 0 4 * * 0 | VACUUM | localhost | 5432 | test | admin | t | weekly-vacuum
(1 row)
- Para visualizar os detalhes da execução do trabalho:
ibmclouddb=> select * from cron.job_run_details;
jobid | runid | job_pid | database | username | command | status | return_message | start_time | end_time
-------+-------+---------+----------+----------+---------+-----------+----------------+-------------------------------+-------------------------------
35 | 85 | 33810 | test | admin | VACUUM | succeeded | VACUUM | 2025-09-23 15:48:00.013814+00 | 2025-09-23 15:48:01.29763+00
- Para cancelar o agendamento de trabalhos:
ibmclouddb=> SELECT cron.unschedule(35);
unschedule
------------
t
(1 row)
- Os registros em
cron.job_run_detailsnão são limpos automaticamente, mas todos os usuários que podem agendar trabalhos cron também têm permissão para excluir seus próprios registros em cron.job_run_details.
ibmclouddb=> SELECT cron.schedule('delete-job-run-details', '0 12 * * *', $$DELETE FROM cron.job_run_details WHERE end_time < now() - interval '7 days'$$);
-
pg_cronsão encerrados sempre que o banco de dados é reiniciado como resultado de atividades como dimensionamento, failover ou switchover. Como não há mecanismo de repetição, o trabalho não será retomado automaticamente. Você deve aguardar a próxima execução programada ou ajustar a programação conforme necessário. -
Até 5 trabalhos pg_cron são executados simultaneamente; trabalhos adicionais aguardam em uma fila.