June 26, 2008

Jobs no PostgreSQL

Filed under: postgresql — coutinho @ 2:37 pm

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.

7 Comments »

  1. Beleza chefe!

    Tá guardado.

    Agora falta fazer um post sobre como adicionar RSS no WordPress do tue site. :)

    Comment by Ribamar FS — June 27, 2008 @ 10:37 pm

  2. :)
    Tá com rss http://coutinho.mondriantecnologia.com/rss
    Eu usei um plugin chamado feedlist que é tão fácil que não vale a pena escrever um tutorial, é só colocar ele na pasta de plugins e mandar ativar :)

    Comment by coutinho — June 28, 2008 @ 11:53 am

  3. Olha só, quem é vivo sempre (des)aparece!

    Comment by Walter Cruz — June 30, 2008 @ 6:14 pm

  4. Se essa é sua volta aos blogs então foi triunfal.
    Continue assim que os amantes do PostgreSQL agradece.

    Comment by Marcelo Coelho — June 30, 2008 @ 7:02 pm

  5. Para mim, a questão que fica é: como usar o agendamento sem depender do PGAdmin? Nada contra ele, mas poder fazer as coisas via SQL é o que tornaria a ferramenta realmente poderosa, não?

    Comment by Fabio Telles — June 30, 2008 @ 7:14 pm

  6. Cara, estou utilizando em maquina windows. Mesmo executando o script pgagent.sql não consegui visualizar o jobs no pgadmin III. Tem mais algum procedimento que devo fazer???

    Abrços.

    Comment by Jéder — November 17, 2008 @ 12:48 pm

  7. Para visualizar os jobs você deve concetar no banco em que você criou os objetos do pgagent. Ex: se vc criou um banco db_jobs, vc deve ter executado o arquivo pgagent.sql nessa base de dados, algo como psql pgagent.sql -d db_jobs, então sua conexão do pgadmin tem que apontar para esse banco pg_jobs, porque não basta você conectar a qualquer outro banco e depois simplesmente clicar no banco db_jobs.

    Comment by coutinho — November 18, 2008 @ 11:53 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment