PostgreSQL TRUNCATE TABLE

17 Mar 2025 | 5 分钟阅读

在本节中,我们将了解 PostgreSQL TRUNCATE TABLE 命令的工作原理,该命令可以快速删除大型表中的所有记录。

要删除表中的所有数据,我们使用 DELETE 命令。当一个表包含大量记录且不再有用时,在这种情况下,我们将使用 TRUNCATE TABLE 命令删除特定表中的所有记录。

Truncate 命令的语法

TRUNCATE TABLE 命令的基本语法如下:

在上面的语法中,我们有以下参数

参数描述
CASCADE此选项会自动截断所有包含对其他表的外键引用的表,或由于 CASCADE 而添加到集合中的任何表。
RESTART IDENTITY它会重复重启截断表所属列的序列。
CONTINUE IDENTITY它不会更改序列的值,这是默认选项。
RESTRICT它也是一个默认选项,如果其他表包含未在命令中提及的表的外键引用,则可以拒绝截断。

注意:TRUNCATE TABLE 命令会删除表中的所有记录,而不会进行检查,并且比 DELETE 命令快。

PostgreSQL 中,我们可以通过两种方式执行 truncate table:

  • 使用 pgAdmin 截断 PostgreSQL 表
  • 使用 SQL Shell (PSQL) 截断 PostgreSQL 表

使用 pgAdmin 截断 PostgreSQL 表

要使用 truncate table 命令pgAdmin 中删除表,我们将按照以下步骤操作:

步骤 1

打开您的 pgAdmin,然后进入 对象树,在那里我们将进入数据库,移至 schemas 下的 public 部分,然后选择我们想要 截断 的特定表 (student_info)

Database→ javatpoint→Schema→ public→ table→ student_info

PostgreSQL TRUNCATE TABLE

步骤 2

然后我们将右键单击选定的 (student_info) 表,然后单击 Truncate 选项,然后从给定的下拉列表中再次选择 Truncate 选项,如下图所示。

PostgreSQL TRUNCATE TABLE

步骤 3

truncate table 弹出窗口将出现在屏幕上,我们将单击 OK 按钮以截断 student_info 表。

PostgreSQL TRUNCATE TABLE

步骤 4

单击 OK 按钮后,表将自动删除,如下图所示,在 Table 部分没有可用的表。

PostgreSQL TRUNCATE TABLE

使用 SQL Shell (PSQL) 截断 PostgreSQL 表

要使用 truncate table 命令psql 中删除表,我们将按照以下步骤操作:

步骤 1

打开 SQL shell (psql),该 shell 将随 必要详细信息 一起出现。之后,我们将使用 PostgreSQL 安装过程中创建的 密码 登录 到 Postgres 数据库服务器。

我们已经连接到 Postgres 服务器,正如我们在下面的屏幕截图中看到的那样

PostgreSQL TRUNCATE TABLE

步骤 2

现在,我们将使用以下命令连接到我们之前创建的特定数据库服务器,即 javatpoint

PostgreSQL TRUNCATE TABLE

步骤 3

最后,我们将执行 truncate table 命令以删除特定表。

PostgreSQL psql 中的 Truncate table 示例

为了实时理解 PostgreSQL Truncate table 的工作原理,我们将看到以下示例:

删除一个表中的所有数据

在下面的示例中,要从 student_information 表中删除所有数据,我们使用 TRUNCATE TABLE 命令:

输出

执行上述命令后,我们将得到以下输出,表明 student_information 表的数据已成功删除。

PostgreSQL TRUNCATE TABLE

下面的命令用于使用 RESTART IDENTITY 选项重置特定列中的值。

让我们看一个 示例,其中我们尝试重置特定列的值。

以下命令删除 student_information 表中的所有行,并返回与 stu_name 列相关的序列。

输出

执行上述命令后,我们将得到以下输出,表明 student_information 表的记录已成功删除。

PostgreSQL TRUNCATE TABLE

实际上,上述命令不会重启 student_information 表中与列相关的序列中的值,因为 Truncate table 命令默认使用 CONTINUE IDENTITY 选项。

删除多个表中的所有记录

如果我们要同时截断一个或多个表中的所有记录,我们可以用 逗号 (,) 分隔每个表。

语法

以下语法用于 删除 多个表中的所有数据:

例如

以下命令用于删除 personsdepartment 表中的所有数据:

输出

执行上述命令后,我们将得到以下输出,显示 persons 和 department 表的数据已成功删除。

PostgreSQL TRUNCATE TABLE

删除包含外键引用的表中的所有记录

如果您需要频繁截断一个表,而该表包含其他表的(未在 TRUNCATE TABLE 命令中列出的)外键引用。

默认情况下,TRUNCATE TABLE 命令不会从具有外键引用的表中删除任何记录。

因此,在这种情况下,我们将在 TRUNCATE TABLE 命令中使用 CASCADE 选项来删除表中以及包含外键引用的其他表中的记录。

语法

删除包含外键引用的表中的所有记录 的基本语法如下:

例如

在下面的示例中,我们将删除 employee 表中的数据以及通过外键约束引用 persons 表的其他表中的数据。

输出

执行上述命令后,我们将得到以下输出,其中 employee 表中的数据已成功删除。

PostgreSQL TRUNCATE TABLE

CASCADE 选项 是谨慎使用的,或者如果您想删除您不想要的表中的记录。

TRUNCATE TABLE 命令默认使用 RESTRICT 选项,该选项可防止我们截断具有外键约束引用的表。

PostgreSQL TRUNCATE TABLE 和事务

如果我们在事务中使用 truncate table 命令,我们可以安全地回滚它,因为它支持事务。

PostgreSQL TRUNCATE TABLE 和 ON DELETE 触发器

如果我们为用于表的 TRUNCATE TABLE 命令应用了触发器,我们必须为该特定表指定 Before Truncate /After Truncate 触发器。

TRUNCATE TABLE 命令会删除表中的所有记录,并且不使用任何 on deleting triggers 选项与表进行关联。

概述

  • 要删除大表中的所有记录,我们可以使用 TRUNCATE TABLE 命令。
  • 如果一个表通过外键约束引用了另一个表,我们可以使用 CASCADE 选项 来截断一个表以及其他表。
  • Truncate table 命令使用 Before / After truncate 触发器,而不是 On Delete trigger

下一个主题PostgreSQL 临时表