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

PostgreSQL ON DELETE CASCADE级联删除行数不符合预期问题

PostgreSQL级联删除未生效问题排查

我不确定带有REFERENCE ... ON DELETE CASCADE约束的PostgreSQL表执行删除操作是否正常运行。
我创建了如下表:

CREATE TABLE formula (
  id bigint PRIMARY KEY,
  mass numeric(13,8) NOT NULL CHECK (mass > 0),
  parent bigint NOT NULL REFERENCES id ON DELETE CASCADE
);

导入数据后,我需要删除所有mass >= 1000.0且id = parent的行,首先执行如下查询统计符合条件的最小删除行数:

SELECT COUNT(*) FROM formula WHERE mass >= 1000.0 AND id = parent;

    count   
  ----------
   25800000

查询得到符合条件的行数为25800000行。由于设置了REFERENCE ... ON DELETE CASCADE约束,我预期实际删除行数会高于25800000,因为存在不满足id=parent条件但关联了待删除行的记录会被级联删除。
我执行了如下删除语句:

DELETE FROM formula WHERE mass >= 1000.0 AND id = parent;

  DELETE 25800000

执行后返回的删除行数同样为25800000,和直接匹配条件的行数一致,我想知道是DELETE语句仅统计直接删除的行数、不包含级联删除的行数,还是级联删除功能未生效?


问题解决方案

后续使用\d+ formula命令重新检查表的约束,原表的约束如下:

[...]
Indexes:
    "pkey" PRIMARY KEY, btree (id)

Foreign-key constraints:
    "parent_fkey" FOREIGN KEY (parent) REFERENCES formula(id) ON DELETE CASCADE

Referenced by:
    TABLE "formula" CONSTRAINT "parent_fkey" FOREIGN KEY (parent) REFERENCES formula(id) ON DELETE CASCADE

而实际使用的新表约束如下:

[...]
Indexes:
    "formula_pkey" PRIMARY KEY, btree (id)

可见新表丢失了外键约束声明,因此级联删除自然无法正常运行,问题得到解决。


内容的提问来源于stack exchange,提问作者jw44lavo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:24:04