Re: [MASSMAIL]Re: restriccion check

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
>

In response to

Responses

Browse pgsql-es-ayuda by date

  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