From: | "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com> |
---|---|
To: | Francisco Olarte <folarte(at)peoplecall(dot)com> |
Cc: | gilberto castillo <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-06 11:18:04 |
Message-ID: | CANm+PCB4SO2C6d7Ae+X=zcFU=q2YV0htZACM5vaq5hSrjA_AOQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Pedro, hacelo con un trigger before update for each row
El 5 de abril de 2017, 14:10, Francisco Olarte <folarte(at)peoplecall(dot)com>
escribió:
> 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 suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>
From | Date | Subject | |
---|---|---|---|
Next Message | Martín Marqués | 2017-04-06 20:22:54 | lista de fomento de pgsql en español |
Previous Message | Jaime Casanova | 2017-04-06 07:19:52 | Re: update masivo con minimos recursos |