Sql 删除帖子时如何级联删除帖子中的回复?

Sql 删除帖子时如何级联删除帖子中的回复?,sql,postgresql,database-trigger,cascading-deletes,Sql,Postgresql,Database Trigger,Cascading Deletes,我允许我的用户按回复计数排序,并将其编入索引,因此操作速度很快。我使用以下SQL维护帖子的回复数量(对于递增的一半,还有一组等效的两个函数): - 我现在尝试运行这个命令:DELETE FROM-conva,其中conva_id=1000031 不幸的是,它不起作用,给了我这个错误: SQL Error [23503]: ERROR: insert or update on table "post" violates foreign key constraint "post_convo_id_

我允许我的用户按回复计数排序,并将其编入索引,因此操作速度很快。我使用以下SQL维护帖子的回复数量(对于递增的一半,还有一组等效的两个函数):

-

我现在尝试运行这个命令:
DELETE FROM-conva,其中conva_id=1000031

不幸的是,它不起作用,给了我这个错误:

SQL Error [23503]: ERROR: insert or update on table "post" violates foreign key constraint 
"post_convo_id_fk"
  Detail: Key (convo_id)=(1000031) is not present in table "convo".
  Where: SQL statement "UPDATE post SET reply_count = reply_count - 1 WHERE post.convo_id = OLD.convo_id"
PL/pgSQL function trigger_function_decrement_reply_count() line 3 at SQL statement
SQL statement "DELETE FROM ONLY "public"."convo_reply" WHERE $1 OPERATOR(pg_catalog.=) "convo_id""
我认为这是因为
conva
条目被删除,然后触发器中的值返回NULL,因此触发器出错

但是,这不是问题,因为在帖子被删除后,回复计数将立即设置为0。也许有一种方法可以在运行时以某种方式禁用触发器?(当然,我还是希望它能在其他职位上运行)


我还希望使触发器保持合理的速度,因为它在每次创建或销毁回复时都会运行。

您可以在运行查询之前尝试禁用特定的触发器

ALTER TABLE public.convo_reply DISABLE TRIGGER post_reply_count_decrement_update;
或抓住违规行为

EXCEPTION WHEN others THEN
....
或者检查post是否存在,更改总体逻辑。在post表上运行触发器例如,更改创建索引的表

ALTER TABLE public.convo_reply DISABLE TRIGGER post_reply_count_decrement_update;
EXCEPTION WHEN others THEN
....