terça-feira, 1 de julho de 2008

Transações em banco de dados postgres no PHP



Hoje tive que fazer um trabalho em sistemas distribuídos e que representasse alguma coisa sobre confiabilidade, atomicidade etc...

Resolvi utilizar transações em banco de dados... e não é que o troço funciona mesmo!?!?!
hauhauhaua :P

Explicando...
Transações:
Um bloco de transação inicia-se com a declaração SQL BEGIN e, se a transação for válida, termina com COMMIT ou END. Se a transação falhar, ela deve ser fechada com ROLLBACK ou ABORT.
Geralmente se usa transações quando se faz necessário que todas as query's dentro do bloco da transação sejam executadas em conjunto e que não existam falhas...ou seja... caso exista uma falha a transação que finaliza com Rollback desfaz a execução das query's que estão no bloco. Caso todas sejam executadas sem problemas daí o commit se encarrega de finalizar as execuções com atomicidade e sucesso! ;)

OBS.: Agradecimentos ao Edgar Gabaldi que me deu a dica de como fazer o html se comportar no blog... hehehe

Exemplo resumido:

começa assim

//iniciando a transação
pg_query ($conexao_do_banco, "begin");

//aqui você coloca as query's que você quer que execute em conjunto...
$query=("select * from tabela");
$execute=pg_exec($conexa_do_banco,$query);

$query_dois=("select * from tabela2");
$execute_dois=pg_exec($conexa_do_banco,$query_dois);

$query_tres=("insert into tabela2 valor=$valor");
$execute_tres=pg_exec($conexa_do_banco,$query_tres);

if(($execute)&&($execute_dois)&&($execute_tres)){
pg_query ($conexao_do_banco, "commit");
print "depositado com sucesso";
}else{
pg_query ($conexao_do_banco, "rollback");
pg_close($conexao_do_banco);
print "Ops! Problemas!";
}


Como você pode ver se todas as execuções forem executadas com sucesso então "commit" é executado senão executa "rollback" e nenhuma das query's dentro do bloco são finalizadas ou concretizadas...

Espero que ajude alguém ;)
Banco de dados é divertido!

P.S.: Passei com A na Banca =D
Mas ainda tenho 2 provas pela frente... =/

5 comentários:

Anônimo disse...

Não está errado o que você fez, mas existe uma estrutura mais apropriada para tratar exceções:

http://www.php.net/manual/pt_BR/language.exceptions.php

O rollback é uma exceção do commit.;-)

Anônimo disse...

é esse edgar gabaldi manja muito mesmo!! hahaha =x

Juca disse...

BAhhh eu devia saber isso, já que o meu chefe no estágio é nada mais nada menos que Sr Roger, figura lendária do TSI!!!
Bahhh o cara dá uma pressão que vo te dize tchê!!!
:/

Anônimo disse...

Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!

Anônimo disse...

ХРЮ!!! ;-P

[img]http://www.iphones.ru/wp-content/uploads/2008/11/superpig-01.png[/img]