Re: Restriccion CHECK

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
Cc: Roberto Andrade Fonseca <randrade(at)inteligentes(dot)com(dot)mx>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Restriccion CHECK
Date: 2005-09-06 18:05:19
Message-ID: 20050906180519.GF26068@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Sep 06, 2005 at 07:15:42PM +0200, Juanky Moral wrote:
> El 6/09/05, Alvaro Herrera<alvherre(at)alvh(dot)no-ip(dot)org> escribió:
> > On Tue, Sep 06, 2005 at 06:25:55PM +0200, Juanky Moral wrote:
> >
> > > Y digo yo: ¿no funcionaría igual con AND y, tratandose de
> > > comparaciones booleanas, más claro?:
> > >
> > > (rut IS NULL AND dv IS NULL)
> >
> > No, porque eso impide que definas cualquiera de los dos campos :-)
> No entiendo lo que quieres decir. Explícate mejor.
> Mira lo que yo trataba de decir:
>
> gnosis=# create table prueba (A boolean, B boolean);
> CREATE TABLE
> gnosis=# insert into prueba values (true,false);
> INSERT 883872 1
> gnosis=# alter table prueba add constraint prueba_chk check (a not is
> null and b not is null);
> gnosis=# alter table prueba add constraint prueba_chk check (a is not
> null and b is not null);
> ALTER TABLE
> gnosis=# update prueba set a = null;
> ERROR: new row for relation "prueba" violates check constraint "prueba_chk"

alvherre=# update prueba set a = null, b = null;
ERROR: el nuevo registro para la relación «prueba» viola la restricción check «prueba_chk»

Este ultimo caso debe permitirse, y eso es lo que hace mi version:

alvherre=# create table prueba2 (a boolean, b boolean);
CREATE TABLE
alvherre=# insert into prueba2 values (true, false);
INSERT 0 1
alvherre=# alter table prueba2 add constraint prueba2_chk check (a is not null = b is not null);
ALTER TABLE
alvherre=# update prueba2 set a = null;
ERROR: el nuevo registro para la relación «prueba2» viola la restricción check «prueba2_chk»
alvherre=# update prueba2 set a = null, b = null;
UPDATE 1

--
Alvaro Herrera -- Valdivia, Chile Architect, www.EnterpriseDB.com
"Lo esencial es invisible para los ojos" (A. de Saint Exúpery)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-09-06 18:07:43 Re: Resultado de un query contra resultado de una function
Previous Message Juanky Moral 2005-09-06 18:02:26 Re: Restriccion CHECK