From: | Francisco Olarte <folarte(at)peoplecall(dot)com> |
---|---|
To: | gilberto(dot)castillo(at)etecsa(dot)cu |
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 17:10:40 |
Message-ID: | CA+bJJbxiQS9Uq2uFpgtW720T2yVeZ+UhAsiR=MtLdHW-OUDtkA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gilberto:
2017-04-05 18:46 GMT+02:00 Gilberto Castillo <gilberto(dot)castillo(at)etecsa(dot)cu>:
>>> 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;
Te tomaste la molestia de leer un poco por encima lo que pedia?
Suponiendo que asi fuera ( que yo personalmente creo que no pero
siempre hay que otorgar el beneficio de la duda):
1.- Su problema es evitar updates, no inserts., lo pone en el punto 3.
2.- Y aunque no insertase siempre null, el campo de liquidado NO es unico.
3.- De hecho el punto 1 de la pregunta dice que insert SIEMPRE es null
en insercion, lo que hace que NUNCA haya conflictos de insercion en
liquidado.
Francisco Olarte.
-
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 | Jaime Casanova | 2017-04-06 07:19:52 | Re: update masivo con minimos recursos |
Previous Message | Gilberto Castillo | 2017-04-05 16:46:58 | Re: [MASSMAIL]Re: restriccion check |