Duplicate data despite unique constraint

From: Jonas Tehler <jonas(at)tehler(dot)se>
To: pgsql-general(at)postgresql(dot)org
Subject: Duplicate data despite unique constraint
Date: 2016-09-02 11:32:56
Message-ID: F7646BD2-62E0-4137-A8C7-7D0F22E39760@tehler.se
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


Hi,

We’re running Postgresql 9.4.5 on Amazon RDS. One of our tables looks something like this:

CREATE TABLE users
(
...
email character varying(128) NOT NULL,
...
CONSTRAINT users_email_key UNIQUE (email)
)

Despite this we have rows with very similar email values. I discovered the problem when I tried to add a column and got the following error:

ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: could not create unique index "users_email_key"
DETAIL: Key (email)=(xxx(at)yyy(dot)com) is duplicated.
: ALTER TABLE "users" ADD COLUMN "client_branch" character varying(255) DEFAULT ‘beta'

Now look at this:

=> select email from users where email = 'xxx(at)yyy(dot)com';
email
---------------------------
xxx(at)yyy(dot)com
(1 row)

=> select email from users where email LIKE 'xxx(at)yyy(dot)com';
email
---------------------------
xxx(at)yyy(dot)com
xxx(at)yyy(dot)com
(2 rows)

I have tried to compare the binary data in various ways, email::bytes, md5(email), encode(email::bytea, 'hex’), char_length(email) and it all looks the same for both rows.

Any suggestions how I can discover the difference between the values and how they could have been added without triggering the constraint? I know that the values were added after the constraint was added.

The data was added from a Ruby on Rails app that also has unique constraints on the email field and validation on the email format.

/ Jonas

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2016-09-02 13:02:53 Re: Duplicate data despite unique constraint
Previous Message dandl 2016-09-02 10:49:12 What limits Postgres performance when the whole database lives in cache?