RE: Ejecutar restriccion CHECK al finalizar la insercion/actualizacion

From: Pedro PG <pedropg(at)outlook(dot)com>
To: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Ejecutar restriccion CHECK al finalizar la insercion/actualizacion
Date: 2013-10-30 16:41:15
Message-ID: BLU180-W32834B606970958AF0A64BA70A0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, en la restricción CHECK llamo a una función que retorna un valor BOOLEAN, ahora ... si podría determinar cual es el ultimo item (en la tabla B tengo un campo que es ORDEN, bastaría con hacerle un MAX) ... que tonto de mi parte, no considere esa solución, de todas formas quise comentar porque investigando encontré una sentencia llamada DEFERRABLE, sin embargo no he podido implementarla (estoy usando PostgreSQL 9.3.X).
Por lo de PostGIS no tenia conocimiento, veo que me sera de utilidad. Gracias por el dato.

> Date: Wed, 30 Oct 2013 13:30:42 -0300
> From: alvherre(at)2ndquadrant(dot)com
> To: pedropg(at)outlook(dot)com
> CC: pgsql-es-ayuda(at)postgresql(dot)org
> Subject: Re: [pgsql-es-ayuda] Ejecutar restriccion CHECK al finalizar la insercion/actualizacion
>
> Pedro PG escribió:
> > Buen día lista, yo nuevamente por aquí aprendiendo. Tengo dos tablas:
> > A -|-----<- B (en B esta el id de A)
> > :: A representa una ruta:: B representa un(os) puntos de la ruta A
> > En la tabla B tengo una restricción CHECK, esta valida que el punto de origen no sea el mismo que el de salida (entre otras validaciones adicionales).
> > Tengo una función que inserta en A y otra función que inserta en B. Desde la función A llamo a la función para insertar en B.
> > El problema radica en que la restricción CHECK se activa por cada tupla actualizada / insertada. ¿ Hay alguna forma de que la restricción CHECK se active solo cuando la ultima tupla sea insertada / actualizada ?
>
> ¿Cómo sabe una tupla en B que es la última? Si puedes crear una
> expresión que lo determine, entonces puedes hacer un CASE que verifique
> esa expresión, y ejecute este chequeo si la expresión es verdadera; y si
> no lo es, entonces no hace nada.
>
> Algo así:
> CHECK (CASE WHEN es_ultima(value) THEN verifica_punto_origen(value) ELSE true END)
>
> En todo caso, tu problema me parece muy sospechoso (posiblemente mal
> modelo) y también me pregunto si no deberías estar usando PostGIS o algo
> así.
>
> --
> Álvaro Herrera http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>
> -
> 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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Yostin Vargas 2013-10-30 19:23:42 tabla con un solo campo tipo Serial
Previous Message Alvaro Herrera 2013-10-30 16:30:42 Re: Ejecutar restriccion CHECK al finalizar la insercion/actualizacion