Artigo original: How to Schedule a Job in PostgreSQL

O agendamento é um recurso que permite automatizar tarefas para que você não precise fazer isso em tempo real.

Neste artigo, veremos como agendar uma tarefa (ou trabalho) no PostgreSQL. Usaremos o pgAgent, que é um agente de agendamento de trabalhos para o PostgreSQL. Se você não sabe o que é um agente de banco de dados, eu já explico.

Esses agentes são processos que rodam em segundo plano. O papel deles é executar os trabalhos/comandos que você deixa registrado neles. Nesses trabalhos, você determina a periodicidade com que quer executar esses comandos.

Agora, vamos pôr a mão na massa...

Como instalar o PostgreSQL e o Stack Builder

Você pode instalar o pgAgent com o Stack Builder.

Instale o PostreSQL a partir do site oficial. Ele fará o download do Stack Builder junto com o instalador do PostgreSQL.

Caso você já tenha o PostgreSQL instalado, é só fazer o download dele e executar também a instalação do Stack Builder.

O Stack Builder é executado assim que a instalação do PostgreSQL é concluída. Estou usando aqui o PostgreSQL14 e o pgAdmin4.

Como instalar o pgAgent

Na instalação do PostgreSQL, em uma das telas, mostrará as opções de extensões que você instalará. A opção do Stack Builder já vem selecionada. Caso não esteja, no entanto, selecione-a.

Após a instalação do PostgreSQL, quando você executa o Stack Builder, ele primeiro abre um assistente de boas-vindas.

Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai

Se você tiver várias versões do PostgreSQL instaladas, escolha uma para instalar o pgAgent.

Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai

Você encontrará o pgAgent na categoria Add-ons, tools and utilities (Add-ons, ferramentas e utilitários). Marque a caixa de seleção dele para instalá-lo.

Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai

Em seguida, ele solicitará que você escolha um diretório onde deseja instalar o pgAgent.

Screenshot-2022-07-10-163956

O Stack Builder abrirá o assistente de instalação do pgAgent.

Screenshot-2022-07-10-164018

Aqui, você escolhe se deseja instalá-lo em Upgrade Mode (Modo de atualização). Caso você já tenha scripts no seu PostgreSQL, e se você não quiser alterá-los automaticamente durante a atualização, marque a caixa.

Screenshot-2022-07-10-164038

Na tela PostgreSQL Installation Details (Detalhes da instalação do PostgreSQL), forneça o usuário e a senha que você digitou quando instalou o PostgreSQL.

Screenshot-2022-07-10-164125

Se você inserir os dados incorretamente, aparecerá uma janela com erro de conexão. Portanto, guarde sempre esses dados de acesso, tanto do PostgreSQL quanto do banco de dados.

OBSERVAÇÃO: Você fará o login no PostgreSQL com o usuário e a senha que você fornece nesse estágio para poder visualizar as tarefas do pgAgent.
Screenshot-2022-07-10-164233

Depois de adicionar esses dados, a instalação começa:

Screenshot-2022-07-10-164250

Demora alguns segundos para terminar.

Screenshot-2022-07-10-164304

Clique no botão Finish (Finalizar).

Screenshot-2022-07-10-164320

Depois de instalado, o Stack Builder mostrará uma tela de instalação concluída. Ali, você verá instruções sobre como instalar e desinstalar utilitários.

Se o Stack Builder estiver instalado, basta executá-lo para instalar outros utilitários. Para desinstalá-los, use o applet Add/Remove Programs (Adicionar/Remover Programas do Painel de Controle do seu sistema).

Com tudo instalado, abra o programa pgAdmin. Ele pedirá a senha, que você inseriu quando o instalou, para abrir o programa.

Screenshot-2022-07-10-190229

Os trabalhos do pgAgent estarão visíveis para você na árvore de navegação no lado esquerdo do painel.

Screenshot-2022-07-10-152307-1

Acima, você pode ver uma visão ampliada da árvore do navegação.

Como criar um trabalho no pgAgent

Para criar um novo trabalho, clique com o botão direito do mouse no botão pgAgent Jobs e clique em Create (Criar).

Screenshot-2022-07-10-152329-1

Você verá um menu, e lá é só clicar em Create > pgAgent Job (Criar > Tarefa do pgAgent).

Screenshot-2022-07-10-191902

A caixa de diálogo criar do pgAgent possui quatro abas.

A primeira é a guia General. Aqui você insere o nome do trabalho e seleciona uma categoria (Job class).

Essa categoria é apenas para fins de categorização/organização interna sua – e não afeta a execução do trabalho. Você pode selecionar uma com base na função do trabalho. Como eu quero exportar os dados para um CSV, escolhi a categoria Data Export (Exportação de dados).

Screenshot-2022-07-10-152531-1

Em seguida, clicamos na aba Steps (etapas). No canto superior direito da aba, haverá um sinal de +. Clique nele para adicionar uma nova linha de etapa.

Screenshot-2022-07-10-153345-1

Quando você clica em Editar a linha (ícone de um lápis), há duas seções: General e Code.

Na seção General:

  1. Adicione o nome da etapa.
  2. Em seguida, você habilita ou desabilita a etapa. Seu trabalho será executado somente se a etapa estiver habilitada.
  3. Dependendo do fato de seu trabalho ser local ou remoto, você pode escolher o tipo de conexão. Vou escolher uma conexão remota para exemplificar uma string de conexão.
  4. Uma conexão remota permite que você adicione manualmente a string de conexão. A sintaxe dela deve ser como na string de conexão libq (documentação em inglês). Vou adicionar meus detalhes de conexão nesse formato: host=localhost port=5432 dbname=postgres
  5. Na caixa de seleção On Error, você pode escolher o que deve acontecer caso ocorra um erro. Eu selecionei para o trabalho falhar.
  6. Finalmente, você pode adicionar um comentário sobre a essa etapa. Em seguida, salve as alterações.

Ao lado, vemos a seção Code.

Screenshot-2022-07-10-155158-1

Como quero exportar os dados de uma visualização, chamarei a visualização e pedirei para exportar o arquivo. O código será:
COPY (select * from acc_view) TO E'C:\\test-data\\try.csv';

Vou salvar as alterações depois de adicionar o comando.

Screenshot-2022-07-10-153614-1

Agora, estamos prontos para agendar esse trabalho. Na aba Schedules, adicionamos a hora da data de início e a hora da data de término do trabalho para iniciar e terminar.

Screenshot-2022-07-10-163332-1

SQL é a última aba. Ela mostra o código gerado pela Interface Gráfica (GUI), pois você também pode criar scripts por código. Se você desejar editar esse código, mostrarei como fazer depois.

Como visualizar os trabalhos criados no pgAgent

Assim que um novo trabalho for criado, ele será exibido em Steps do pgAgent na árvore de navegação.

Screenshot-2022-07-10-163417-1

Seus agendamentos (schedules) e etapas (steps) serão exibidos quando você estender o trabalho agendado.

Screenshot-2022-07-10-163540-1

Para ver se o trabalho foi executado (se falhou ou se foi bem-sucedido), selecione o trabalho pelo nome e clique na guia Statistics (Estatísticas) no painel. Aqui, você pode ver o número de vezes que o trabalho foi executado, hora de início e término, seu status e o id. Na coluna Status, a sigla s significa sucesso e f significa falha.

Screenshot-2022-07-10-163639-1

Para depurar o motivo de um trabalho ter falhado, basta clicar no nome da etapa em Steps (Etapas), na árvore de navegação, e clicar na aba de estatísticas no painel. Na coluna Output (Saída), você pode ver o motivo de o trabalho ter falhado.

No meu caso, não foi possível acessar o diretório para o qual eu estava tentando copiar os dados. Depois de alterar o caminho, meu trabalho foi executado com sucesso (observe a primeira linha).

Como editar trabalhos no pgAgent

Para editar um trabalho no pgAgent, selecione o trabalho que deseja alterar e clique na guia Properties (Propriedades) no painel.

Screenshot-2022-07-10-201542

Clique no ícone de lápis no canto superior esquerdo, ele abrirá um assistente onde você poderá editar todos os detalhes.

Conclusão

Nem sempre é viável criar agendadores em seu código. Quando fazer isso é uma opção, ela pode ser muito útil.

O agendamento de trabalho, juntamente com a exportação de dados no formato CSV, é um recurso poderoso do PostgreSQL. Vou tentar explicar como criar um trabalho dinamicamente em um próximo tutorial. Ótimo aprendizado para você!