小编Rya*_*ini的帖子

当对 Postgres 中的外部表调用 TRUNCATE CASCADE 时,带有 ON DELETE SET NULL 的外键仍会被删除

也许我在这里遗漏了一些东西:

CREATE TABLE public.example_table (
    id integer UNIQUE
);

CREATE TABLE public.foreign_table (
    id integer,
    example_table_id integer,
    CONSTRAINT fk_example_table_id
    FOREIGN KEY (example_table_id)
    REFERENCES public.example_table (id)
    ON DELETE SET NULL
);

INSERT INTO public.example_table (id) VALUES
    (1);

INSERT INTO public.foreign_table (id, example_table_id) VALUES
    (1, 1),
    (2, null);
Run Code Online (Sandbox Code Playgroud)

如果我运行TRUNCATE CASCADE,两个表都会被擦除,这不是我预期会发生的情况。

TRUNCATE example_table CASCADE;

SELECT COUNT(*) FROM public.foreign_table;

0
Run Code Online (Sandbox Code Playgroud)

我期望发生的情况会foreign_table改变为:

(1, null)
(2, null)
Run Code Online (Sandbox Code Playgroud)

我是否不明白 SET NULL 应该完成什么?

有没有办法使用 TRUNCATE CASCADE 而不将其从另一个表中删除?我在可以调用的地方使用 Laravel Model::truncate();,它会自动截断表并重置我的索引,我希望我可以调用它example_table并让它重置所有行foreign_table, …

postgresql truncate

7
推荐指数
1
解决办法
2538
查看次数

标签 统计

postgresql ×1

truncate ×1