From: | "Gilberto Castillo" <gilberto(dot)castillo(at)etecsa(dot)cu> |
---|---|
To: | "Francisco Olarte" <folarte(at)peoplecall(dot)com> |
Cc: | gilberto(dot)castillo(at)etecsa(dot)cu, "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:41:57 |
Message-ID: | 44278.192.168.207.54.1491410517.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 NOT NULL;
No lo probé, pero esa es la idea.
--
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
From | Date | Subject | |
---|---|---|---|
Next Message | Gilberto Castillo | 2017-04-05 16:46:58 | Re: [MASSMAIL]Re: restriccion check |
Previous Message | Francisco Olarte | 2017-04-05 16:32:42 | Re: [MASSMAIL]Re: restriccion check |