You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL删除重复行报错:column 'hash' does not exist 求助

解决PostgreSQL删除重复行时的"column does not exist"错误

嘿,这个错误的原因其实特别明确——你的controle表根本没有叫hash的列!你写的GROUP BY hash里的hash是你误以为存在的列名,但数据库找不到它,自然就抛出报错了。

给你一步步梳理解决思路:

  1. 先确认表的真实列名
    先执行这条语句查看controle表的所有列,找到你实际用来判断重复的那个列(比如可能你把列名写成了hash_value、content_hash之类的,自己记错了):

    SELECT column_name FROM information_schema.columns WHERE table_name = 'controle';
    
  2. 修正删除语句
    把语句里的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
    );
    
  3. 更安全的写法(避免空结果风险)
    如果子查询返回空(比如表中没有重复行),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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:15:50