Re: duda sobre unicidad de columnas

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

In response to

Browse pgsql-es-ayuda by date

  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?