Re: Use of !~* to keep a varchar column UNIQUE

From: Sean Davis <sdavis2(at)mail(dot)nih(dot)gov>
To: Don Morrison <donmorrison(at)gmail(dot)com>, <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Use of !~* to keep a varchar column UNIQUE
Date: 2006-08-18 16:44:53
Message-ID: C10B66C5.FADE%sdavis2@mail.nih.gov
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On 8/18/06 12:38 PM, "Don Morrison" <donmorrison(at)gmail(dot)com> wrote:

> Hello All,
>
> Is there a sane way to do this?
>
> I have a table with a column: "name VARCHAR(40) NOT NULL UNIQUE"
>
> Two problems with this:
>
> 1)UNIQUE is case-sensitive
> 2)UNIQUE is whitespace sensitive
>
> Has anyone come up with a way, or ways to trim leading and trailing
> whitespace, then do a case-insensitive uniqueness check efficiently
> and semi-elegantly?

You can define your index to be unique on a function of the column. As an
example:

create table testtable (
name varchar(40) not NULL
);
create unique index my_case_insensitive_index on testtable(lower(name));

insert into testtable(name) values ('John');
INSERT 0 1
insert into testtable(name) values ('john');
ERROR: duplicate key violates unique constraint "my_case_insensitive_index"

You get the idea, hopefully.

Sean

In response to

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Tom Lane 2006-08-18 16:48:03 Re: Use of !~* to keep a varchar column UNIQUE case-insensitive
Previous Message Tom Lane 2006-08-18 16:41:58 Re: Function error- A column definition list is required for functions returning "record"