another possibility is to have create unique index stmts default to a non-unique index if the uniqueness fails. That way you get the benefit of having a defined index in place.
I usually create a duplicate table with the primary key, fill it with the unique values and switch the table names around and (after I don't get complaints about missing data) drop the old table. If you have the space to duplicate your original table, this allows you to make the fix with virtually no down time to the users. You may have to scrape a few straggler records that were added to the old table while the new one was building, but that's not usually much of a problem.
ALTER TABLE ADD (record_num integer) ; -- Please forgive syntax if wrong. Haven't done this in years!
ALTER TABLE MODIFY (record_num serial);
ALTER TABLE ADD PRIMARY KEY (record_num);