Re: problema con cadena vacia y null en llave principal

From: Alejandro Gasca <agasca(at)yahoo(dot)com>
To: ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con cadena vacia y null en llave principal
Date: 2006-09-29 14:24:40
Message-ID: 20060929142440.6717.qmail@web34307.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Leonel Nunez <lnunez(at)enelserver(dot)com> escribió:

> > Bueno lo que yo tengo entendio del modelo entidad realcion es que
> una
> > clave principal no puede aceptar valores nulo, por lo tanto al
> definir un
> > campo como clave principal PRIMARY KEY por defecto este no acepta
> > valores nulos.
> >
> > Ahora bien no confundir un NULL con una cadena vacia que es muy
> diferente
> > si esta es la cuetion creo que la unica solucion es un check.
> >
> > yo lo implementaria asi check(campo<>'')
> >
>
>
> pero si la cadena trae NULL el check regresaria verdadero :
>
>
> postgres=# create table a ( id varchar , dato varchar );
> CREATE TABLE
> postgres=# insert into a ( dato ) values ('test');
> INSERT 0 1
> postgres=# select * from a;
> id | dato
> ----+------
> | test
> (1 row)
>
> postgres=# select * from a where id <> '' ;
> id | dato
> ----+------
> (0 rows)
>
> postgres=# select * from a where id is null ;
> id | dato
> ----+------
> | test
> (1 row)
>
>
>
>
>
> leonel
>
>
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
>
> http://archives.postgresql.org/pgsql-es-ayuda
>

pues si, y efectivamente, no es lo mismo null que '' y es precisamente
ese el problema, uno de los problemas de siempre con los campos de
texto...

Lo que mejor hice fue alterar uno ejemplo de trigger para mayusculas
que se han posteado por aqui, dejandolo asi:

CREATE OR REPLACE FUNCTION catalogos.tcl_a_mayusculas_con_trim()
RETURNS "trigger" AS
$BODY$foreach key $args {
if {[info exists NEW($key)]} {
set resul [string trim [string toupper $NEW($key)]]
if {[string length $resul] == 0} {
elog ERROR "no se acepta cadena vacia para $key"
}
set NEW($key) $resul
}
}
return [array get NEW]$BODY$
LANGUAGE 'pltcl' VOLATILE;

y ya, para que me solucione lo de las mayusculas, y lo de las cadenas
vacias.

Soy de la idea que la base de datos valide y preprocese lo mas que se
pueda la entrada de datos ( y salidas y etc...), no se si esto este
demasiado fuera de lugar, pero ¿entonces para que tanto esfuerzo en
meterle lenguajes de programacion a la base? Pienso que uno de los
fines es que el back-end sea lo mas autosuficiente posible del
front-end... Esto es, suprimir el problema aque que se tenia en fox,
por ejemplo, que si el usuario entraba "por otro lado" le daba,
demasiado facil, "en la torre" -como dice por aqui-, a las tabla y la
base.
Pero en fin, no que perder de vista esa maxima que anda por aqui:
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying to
produce bigger and better idiots. So far, the universe is winning."

Alejandro

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Omar Zeballos (Kantutani) 2006-09-29 14:38:54 Re: problema con cadena vacia y null en llave principal
Previous Message Sistemas C.M.P. 2006-09-29 13:35:26 Copiar entre servidores