Can I add a unique constraint that ignores existing violations?
The answer is "yes".  You can do this with a filtered index (see here for documentation).

For instance, you can do:

create unique index t_col on t(col) where id &gt; 1000;


This creates a unique index, only on new rows, rather than on the old rows.  This particular formulation would allow duplicates with existing values. 

If you have just a handful of duplicates, you could do something like:

create unique index t_col on t(col) where id not in (&lt;list of ids for duplicate values here&gt;);