PostgreSQL删除重复行报错:column 'hash' does not exist 求助
解决PostgreSQL删除重复行时的"column does not exist"错误
嘿,这个错误的原因其实特别明确——你的controle表根本没有叫hash的列!你写的GROUP BY hash里的hash是你误以为存在的列名,但数据库找不到它,自然就抛出报错了。
给你一步步梳理解决思路:
先确认表的真实列名
先执行这条语句查看controle表的所有列,找到你实际用来判断重复的那个列(比如可能你把列名写成了hash_value、content_hash之类的,自己记错了):SELECT column_name FROM information_schema.columns WHERE table_name = 'controle';修正删除语句
把语句里的hash替换成你查到的真实列名就行。另外原语句里的HAVING count(*) >=1完全没必要,因为分组后每个组至少有1条数据,删掉这个条件更简洁。比如假设你实际用来判断重复的列是
content_hash,修正后的语句:DELETE FROM controle WHERE id_controle NOT IN ( SELECT MIN(id_controle) FROM controle GROUP BY content_hash );更安全的写法(避免空结果风险)
如果子查询返回空(比如表中没有重复行),NOT IN会导致所有行被误删,用EXISTS的写法更稳妥:DELETE FROM controle c1 WHERE EXISTS ( SELECT 1 FROM controle c2 WHERE c2.content_hash = c1.content_hash -- 同样替换成真实列名 AND c2.id_controle < c1.id_controle );
⚠️ 重要提醒:先备份数据! 执行删除前,先把DELETE改成SELECT *,看看要删除的行是不是你预期的,确认没问题再执行删除操作。
内容的提问来源于stack exchange,提问作者Amandine
相关产品推荐
相关产品推荐

