Jobs no PostgreSQL
Um recurso interessante do Oracle e que não está presente nativamente no PostgreSQL é o agendamento de tarefas, popularmente conhecido como “Jobs”. Embora o postgreSQL não saia do forno com o suporte a jobs, o PgAdmin3 instala o pgAgent, uma execelenete implementação de um sistema de jobs.
O pgAgent é tão bom que algumas distribuições linux já o tem disponível em um pacote independente do PgAdmin. No meu caso, na versão do fedora que usei neste tutorial o pgagent vem dentro do pacote do pgadmin3, assim sendo precisei instalar primeiro o pgadmin.
root@python:~# yum install pgadmin3
root@python:~# su - postgres
postgres@python:~$ createdb pgagent
postgres@python:~$ createlang plpgsql pgagent
postgres@python:~$ psql -d pgagent -f /usr/share/pgadmin3/pgagent.sql
postgres@python:~$ pgagent hostaddr=127.0.0.1 dbname=pgagent
Após essa atapa o pgagent está instalado e já possível agendar trabalhos em seu servidor PostgreSQL. Vamos ver agora como fica o agendamento de uma tarefa simples.
Vamos abrir o pgadmin3 e criar uma conexão com o banco do pgagent, esse detalhe é muito importante porque o nó jobs só irá aparecer se sua conexão estiver apontando para este banco.
Após se conectar ao banco de dados você deverá ver na árvore de objetos do pgAdmin o nó chamado “Trabalhos”. É a partir deste nós que iremos fazer o agendamento de nossos serviços.
Para testar nosso job vamos imaginar que temos uma determinada função escrita em alguma pl, que deve ser chamada de segunda a sexta, em horário de expediente, de 30 em 30 minutos.
Para isso precisamos entender alguns conceitos do pgagent:
Trabalho: Um conjunto de passos a ser executados em um determinado momento
Passo: Um passo é uma das tarefas que fazem parte de um trabalho, um trabalho pode ter várias tarefas.
Agendamento: Um agendamento define quando o trabalho será executado
Para definir essa tarefa execute as seguintes etapas:
1 - Clique com o botão direito do mouse sobre o nó trabalhos e em seguida clique em Novo Trabalho e na janela que se abre informe o nome do seu trabalho e clique em ok. Após esse passo seu trabalho deve aparecer na árvore de objetos como filho do nó trabalho.
2 - Clique com o botão direito do mouse no nó do trabalho que você criou e clique em Novo Objeto > Novo Passo. Nesta janela você deve informar um nome para o passo, em seguida escolha em qual banco de dados você deve estar conectado para executar este passo, em seguida clique na aba definição e digite o SQL que vai chamar a função que você precisa executar e clique em OK, no meu caso aqui digitei o seguinte “select executar_vacuum_condicional(20)”, essa uma função minha que executa vacuum nas tabelas onde o percentual de linhas mortas seja superior ao valor que eu passei como parametro.
3 - Clique com o botão direito do mouse no nó do trabalho que você criou e clique em Novo Objeto > Novo Agendamento. Nesta janela você deve informar o nome do agendamento e a data de inicio deste agendamento, se for o caso você pode informar também a data final deste agendamento, que seria a data até quado ele será executado.
Na guia “dias” no meu caso eu escolhi as opções segunda, terca, quarta, quinta e sexta. Na guia “Tempos” eu escolhi as horas 8,9,10,11,12,13,14,15,16,17,18 e os minutos 00 e 30 e cliquei em OK.
Com essa configuração eu tenho um trabalho que executa a função executar_vacuum_condicional(20) de segunda a sexta, no horário de 8 a 18, no minuto 00 e no minuto 30 de cada hora.
Com isso você deve ver no pgAdmin uma tela semelhante à minha, onde é possível ver o JOB, seus passos e agendamentos e detalhes como: a última vez que foi executado, o agendamento da próxima execução, etc.



