我的postgres数据库中有一个表格,它基本上是一本大学词典,有两列:id和name。
我需要对字典进行一些清理,并且需要执行以下操作:
update university_dictionary set name=replace(name, 'NY', 'New York');
问题是在name
列上设置了一个唯一约束,因此如果有University of NY
和University of New York
则此更新将导致唯一约束冲突。有没有办法在更新后删除违反约束的记录?
您可以通过两个查询来执行此操作。
delete from university_dictionary a
where name like '%NY%' and
exists(select 1 from university_dictionary b
where replace(a.name, 'NY', 'New York')=b.name);
update university_dictionary set name=replace(name, 'NY', 'New York')
where name like '%NY%';
在执行生命数据之前对此进行一些测试。 没有太多数据可以尝试:-(
此致敬意 比亚尼