Pedro, hacelo con un trigger before update for each row El 5 de abril de 2017, 14:10, Francisco Olarte <fola...@peoplecall.com> escribió:
> Gilberto: > > 2017-04-05 18:46 GMT+02:00 Gilberto Castillo <gilberto.casti...@etecsa.cu > >: > >>> 2017-04-05 16:46 GMT+02:00 Gilberto Castillo > >>> <gilberto.casti...@etecsa.cu>: > >>>>> 2017-04-05 16:22 GMT+02:00 Pedro PG <pedr...@outlook.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@postgresql.org > ) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda >