Postgres 建议“同时截断表......”

dav*_*ley 11 postgresql truncate cascade

运行时:

TRUNCATE TABLE YYYYY RESTART IDENTITY
Run Code Online (Sandbox Code Playgroud)

我看到此错误消息:

ERROR:  cannot truncate a table referenced in a foreign key constraint
DETAIL:  Table "XXXXX" references "YYYYY".
HINT:  Truncate table "XXXXX" at the same time, or use TRUNCATE ... CASCADE.
Run Code Online (Sandbox Code Playgroud)

中的两个建议HINT

  1. 使用TRUNCATE ... CASCADE是有意义的,并且有效,但不太明确,因为必须检查YYYYY以查看级联的去向。这让我想尝试另一种选择:

  2. Truncate table "XXXXX" at the same time,但我的问题是:

    截断表是什么意思at the same time


我尝试添加 a TRUNCATE XXXXX...(并将它们都包装在BEGIN/ 中COMMIT),但这会产生相同的错误。

ype*_*eᵀᴹ 13

  1. 同时截断一个表是什么意思?

这意味着与相同的声明。您可以截断多个表:

TRUNCATE xxxxx, yyyyy RESTART IDENTITY ;
Run Code Online (Sandbox Code Playgroud)

Postgres 文档中的更多详细信息:TRUNCATE


cod*_*g82 6

1) 级联截断可能很危险。如果您有一个查找表(在本例中,我相信 XXXX),请与它吻别,因为它将被截断,您将丢失所有数据。

例如,您有一个客户表 (YYYY),其 FK 为订单 (XXXX)。当您使用级联截断截断 YYYY 时,它会截断 YYYY。如果没有,它将显示您看到的截断错误。

2)同时截断表“XXXX”意味着它建议您也截断您的查找/引用表。