Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabiapo

LOCK ao executar uma função

Recommended Posts

Pessoal,

 

Estou desenvolvendo um sistema de workflow onde o usuário ao clicar em um botão, eu já passo o número do acionamento para o atendente e repasso para a próxima página em PHP.

 

Minha dúvida é: Foi desenvolvida uma tabela com apenas um campo com o número do acionamento que deve ser incremental. Fiz uma função onde leio a tabela com o número e faço um upload em seguida somando 1 neste campo. PERGUNTA: Pode existir de mais de um acionamento chamar a mesma função e dar problemas com este numeração? Existe alguma forma de "lockar" este registro enquanto a função não for concluída ou o POSTGRESQL já faz isto? Pois tenho receio de ter mais de uma chamada à função simultaneamente e na leitura o banco passar o número do registro para mais de um acionamento.

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você quer dizer se mais de uma pessoa acionar ao mesmo tempo ?

Vai incrementar normalmente na tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dee, isto mesmo. Vai incrementar normalmente.

 

A minha dúvida é: Se mais de uma pessoa acionar ao mesmo tempo esta função, corro o risco delas pegarem o mesmo número na tabela e incrementarem ou "loca" o registro de forma que uma única pessoa execute a função e a outra aguarde o término da função para começar a executar?

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não Não. Normal.

É assim, não é ao MESMO TEMPO. É SIMULTÂNEAMENTE. Parece que é ao mesmo tempo né.

Nem mesmo o Windows consegue realizar dois processos ao mesmo tempo. Ninguém consegue. É simultâneamente. Primeiro uma, depois outra.

E como se trata de dados, informações... é muito rápido.

É muitoo rápido...

São milésimos (ou mais rapido do que isso).

 

De nada =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK Dee.

Até mesmo que pesquisei, a própria procedure desenvolvida garante as características de uma transação.

Desta forma, será sempre um de cada vez.

E em caso de erro, eu não devolvo o número que está na tabela. Toda a transação é cancelada.

 

Muito obrigada pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato.

Existe o Begin Transaction, Commit, Rollback para isto.

 

É bastante usado em transação de dinheiro em banco. Porque ?

Por exemplo você está enviando um dinheiro, transferência, daí no meio do processo acaba a força.

O Dinheiro foi enviado ou nao ? Não. Pq ele deu um Rollback no Processo inteiro. Desta forma, nada foi enviado. Ele volta para o inicio. E quando voltar ao normal, o processo fará tudo novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.