Re: [MASSMAIL]Re: restriccion check

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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