假设存在以下表和触发器.
CREATE TABLE "parent_table"
(
id uuid PRIMARY KEY
);
CREATE TABLE "child_table"
(
id bigserial PRIMARY KEY,
parent_id uuid,
CONSTRAINT "child_table_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "parent_table" ("id") ON DELETE CASCADE
);
CREATE OR REPLACE FUNCTION add_child_trigger() RETURNS TRIGGER AS
$$
BEGIN
RETURN new;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "on_change_add_change_event"
BEFORE INSERT OR UPDATE OR DELETE
ON "child_table"
FOR EACH ROW
EXECUTE PROCEDURE "add_child_trigger"();
执行以下语句:
INSERT INTO "parent_table" VALUES ('a275b51e-9a4f-460f-a0df-589fac39f9fe');
INSERT INTO "child_table" ("parent_id") VALUES ('a275b51e-9a4f-460f-a0df-589fac39f9fe');
DELETE FROM "parent_table" WHERE "id" = 'a275b51e-9a4f-460f-a0df-589fac39f9fe';
然后请注意,显然每child_table
个条目中仍然存在一个条目,但它指向一个不存在的parent_table
记录.我以为外键保证了目标记录的存在,不是吗?