Wil*_*nes 3 postgresql unique duplicates
我在Postgres中有一张桌子,上面满是文章。文章具有与之相关联的url标记,用于显示它们,example.com/pretty_name而不是example.com\2343。
不幸的是,当我刚开始的时候,我对URL实施了唯一的约束,但是却忽略了对大小写不敏感的限制,因此我想纠正这个错误,并开始要求URL不区分大小写。
作为第一步,我需要修复数据库中已经存在的所有重复URL。如何在不区分大小写的基础上在表中搜索具有重复url的行,并保留原样的行,而对于其余重复项,在末尾附加类似“ _2”的内容?
这特别棘手,因为我不是100%肯定没有重复重复的网址。即,我可能在一个URL上有3个重复项,在理想情况下,我希望第一个为URL,pretty_name第二个为URL,pretty_name_2第三个为URL pretty_name_3。
如果表上有某种唯一的ID:
UPDATE articles a1 set url = a1.url||'_2'
WHERE a1.id not in (select max(a2.id) from articles a2 group by lower(a2.url));
Run Code Online (Sandbox Code Playgroud)
如果您没有唯一的ID:
UPDATE articles a1 set url = a1.url||'_2'
WHERE a1.ctid not in (select max(a2.ctid) from articles a2 group by lower(a2.url));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |