gpt4 book ai didi

`session_replication_role = replica`时的Postgresql截断与删除

转载 作者:行者123 更新时间:2023-11-29 13:42:21 27 4
gpt4 key购买 nike

当我第一次运行时

SET session_replication_role = DEFAULT;

CREATE TABLE users (
id serial PRIMARY KEY
);

CREATE TABLE posts(
id serial PRIMARY KEY,
user_id INTEGER REFERENCES users(id)
);

然后运行
INSERT INTO users(id) VALUES (1);
INSERT INTO posts(id, user_id) VALUES (1, 1);

SET session_replication_role = replica;

DELETE FROM users;

它成功删除了 users 中的行即使这违反了参照完整性,因为 session_replication_role = replica .到现在为止还挺好。

但是,当我改为运行时
INSERT INTO users(id) VALUES (1);
INSERT INTO posts(id, user_id) VALUES (1, 1);

SET session_replication_role = replica;

TRUNCATE users;

我得到这个输出:
ERROR:  cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "posts" references "users".
HINT: Truncate table "posts" at the same time, or use TRUNCATE ... CASCADE.

出于性能原因,我真的希望能够使用 TRUNCATE 而不是 DELETE。我如何在不使用 TRUNCATE users CASCADE 的情况下解决此问题?我不能使用级联删除,因为我的数据库可能有其他外键引用了我不想删除的用户表。

最佳答案

您需要添加CASCADE选项:

TRUNCATE users CASCADE;

db<>fiddle demo

关于 `session_replication_role = replica`时的Postgresql截断与删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com