Re: [MASSMAIL]Re: restriccion check

From: "Gilberto Castillo" <gilberto(dot)castillo(at)etecsa(dot)cu>
To: "Francisco Olarte" <folarte(at)peoplecall(dot)com>
Cc: "Pedro PG" <pedropg(at)outlook(dot)com>, "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [MASSMAIL]Re: restriccion check
Date: 2017-04-05 16:46:58
Message-ID: 44478.192.168.207.54.1491410818.squirrel@webmail.etecsa.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


>
>> Gilberto:
>>
>> 2017-04-05 16:46 GMT+02:00 Gilberto Castillo
>> <gilberto(dot)castillo(at)etecsa(dot)cu>:
>>>> 2017-04-05 16:22 GMT+02:00 Pedro PG <pedroPG(at)outlook(dot)com>:
>>>>> Lo que deseo es agregar una restriccion CHECK que solo permita
>>>>> modificar
>>>>> datos de la tupla si y solo si liquidado es NULL.
>>>>
>>>> Igual estoy un poco oxidado, pero las restricciones check lo que hacen
>>>> es comprobar un juego de valores de la tupla, no miran si vienen de
>>>> update o de lo que sea.
>>>>
>>>>> 1) Cuando se inserta un registro el campo liquidado siempre sera NULL
>>>>> (esto
>>>>> es correcto).
>>>>> 2) Desde un procedimiento externo actualizare liquidado (esto tambien
>>>>> es
>>>>> correcto).
>>>>> 3) Si deseo actualizar el registro, solo debe permitirme si el campo
>>>>> liquidado es NULL (aqui mi problema).
>>>>
>>>> Probablemente puedes hacer eso con un trigger. De todas formas, salvo
>>>> que estes haciendo el control con roles y mucho cuidado, porque no
>>>> pones un 'where liquidadoull' extra en los updates? Tambien podrias
>>>> probar con un "create rule x on update to table where OLD.liquidado is
>>>> not null instead do nothing' o algo asi, pero te puede dar problemas
>>>> si quieres revertir una fila a liquidadoull. Al fin y al cabo, si
>>>> alguien puede cambiar liquidado a null probablemente pueda hacer
>>>> not-null->null->update->null.
>>>
>>> Yo Usaría UPSERT
>>
>> Iluminanos, porfa. Hacer eso con upsert seria un truco fantastico.

insert into mytabla as a (campo1, liquidado)
values ('valor1',1),('valor2',null)
on conflict (liquidado)
do update set
liquidado = a.liquidado + EXCLUDED.liquidado
where a.liquidado IS NULL;

--
Saludos,
Gilberto Castillo
ETECSA, La Habana, Cuba

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Francisco Olarte 2017-04-05 17:10:40 Re: [MASSMAIL]Re: restriccion check
Previous Message Gilberto Castillo 2017-04-05 16:41:57 Re: [MASSMAIL]Re: restriccion check