我有一张桌子,我们称它为parent:
CREATE TABLE parent (
id TEXT PRIMARY KEY,
name TEXT,
description TEXT,
-- other parent attributes
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
);
它有许多子表,比如说child_1,child_2,... child_n。它们看起来都像:
CREATE TABLE child_n (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
parent_id TEXT NOT NULL REFERENCES parent (id) ON DELETE CASCADE,
-- other columns of child_n attributes
);
其中一些孩子甚至可能有自己的子表。
当我更新父行中的一行时,我经常还想替换它的所有后代(即:它的子代、他们的子代等递归),因为它们只与该父行的旧版本相关。
我的计划是依靠它REFERENCES parent (id) ON DELETE CASCADE
,但这只有在我真正删除父级时才有效。我知道我可以在事务中删除和插入,但这使得保留列(如created_at
)的值更加尴尬。
有没有办法在不实际删除父行的情况下触发子级的级联删除?
只需重新插入已删除的记录:
小提琴