Re: Ajuda com trigger

From: Fabrízio de Royes Mello <fabriziomello(at)gmail(dot)com>
To: Rafael Fialho <rafafialho6(at)gmail(dot)com>
Cc: Eloi Ribeiro <eloi(at)eloiribeiro(dot)eu>, "pgsql-pt-geral(at)lists(dot)postgresql(dot)org" <pgsql-pt-geral(at)lists(dot)postgresql(dot)org>
Subject: Re: Ajuda com trigger
Date: 2020-06-18 21:10:15
Message-ID: CAFcNs+rsJKbUM3rFCt2dOWnM+9FGGsCHdffvu9A8pTdksm1=hQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-pt-geral

On Thu, Jun 18, 2020 at 4:53 PM Rafael Fialho <rafafialho6(at)gmail(dot)com> wrote:

> Em qui., 18 de jun. de 2020 às 13:35, Eloi Ribeiro <eloi(at)eloiribeiro(dot)eu>
> escreveu:
>
>> Bom dia a todos aqui na lista,
>>
>
> Boa tarde!
>
>
>> Alguém me poderia ajudar com o seguinte trigger.
>> [ ...]
>> IF NEW.x <> OLD.x THEN
>>
>
>
>> Aqui temos um pequeno problema: como suas colunas são boolean sem
> default, o default delas é null. Isso prejudica essa comparação quando um
> dos valores é nulo.
> Qualquer comparação entre nulo com qualquer coisa retorna nulo, então não
> está satisfazendo a condição.
> Você pode usar coalesce para tratar os 2 lados e isso deve resolver o
> problema: coalesce(new.x,false) <> coalesce(old.x,false)
>
>
Apenas complementando o que o Rafael já apontou de problema, com COALESCE
irá funcionar claro porém existe o operador IS DISTINCT FROM que trata NULL
e será mais performático então basta fazer o seguinte:

...
IF NEW.x IS DISTINCT FROM OLD.x THEN
...

Att,

--
Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

In response to

Responses

Browse pgsql-pt-geral by date

  From Date Subject
Next Message Rafael Fialho 2020-06-18 21:17:06 Re: Ajuda com trigger
Previous Message Leandro Guimarães Faria Corcete DUTRA 2020-06-18 20:36:23 Re: Ajuda com trigger