在更新后删除违反约束的行



我的postgres数据库中有一个表格,它基本上是一本大学词典,有两列:id和name。

我需要对字典进行一些清理,并且需要执行以下操作:

update university_dictionary set name=replace(name, 'NY', 'New York');

问题是在name列上设置了一个唯一约束,因此如果有University of NYUniversity 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%';   

在执行生命数据之前对此进行一些测试。 没有太多数据可以尝试:-(

此致敬意 比亚尼

最新更新