From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | "Ing(dot) Esneiker Enriquez Cabrera" <eenriquez(at)cav(dot)desoft(dot)cu> |
Cc: | 'Ayuda' <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: duda sobre unicidad de columnas |
Date: | 2013-08-28 16:31:28 |
Message-ID: | 20130828163128.GD27647@eldon.alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Ing. Esneiker Enriquez Cabrera escribió:
> Hola a todos.
>
> Estoy usando postgres 9.1 donde tengo algunas tablas en las cuales quiero
> crear restricciones de unicidad en algunas columnas, por ejemplo que el
> campo nombre no permita valores duplicados. El caso es que el gestor me deja
> guardar los valores tales como Nombre uno y nombre uno porque los maneja
> como valores diferentes, cuando desde el punto de vista del negocio
> representan el mismo valor. ¿Cuál sería la forma más eficiente de hacer
> esto?
Las restricciones UNIQUE sólo permiten nombres de columna, no
expresiones; pero puedes usar una restricción EXCLUSION:
alvherre=# create table esneiker (nombre text);
CREATE TABLE
alvherre=# alter table esneiker add constraint nombre_unico exclude (upper(nombre) with =);
ALTER TABLE
alvherre=# insert into esneiker values ('nombre uno');
INSERT 0 1
alvherre=# insert into esneiker values ('nombre Uno');
ERROR: llave en conflicto viola restricción por exclusión «nombre_unico»
DETALLE: La llave (upper(nombre))=(NOMBRE UNO) está en conflicto con la llave existente (upper(nombre))=(NOMBRE UNO).
alvherre=#
Me imagino que también querrás agregar algo que elimine los espacios en
blanco (y tabs, saltos de línea, etc, o más generalmente cualquier cosa
que no sean letras, y quizás puntos) al principio y al final, y los
espacios duplicados al medio; que no deje pasar " nombre Uno" ni "nombre
uno".
Ahora, qué pasa si llegan dos personas que se llaman Esneiker Enríquez.
Espero que no las obligues a usar la misma cuenta.
--
Á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
From | Date | Subject | |
---|---|---|---|
Next Message | felix gonzales | 2013-08-28 16:47:47 | Re: duda sobre unicidad de columnas |
Previous Message | Emanuel Calvo | 2013-08-28 14:26:33 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] ¿Postgres en Amazon RDS? |