举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > PostgreSQL TRUNCATE

PostgreSQL TRUNCATE

2023-06-14 19:31 PostgreSQL TRUNCATE

 PostgreSQL TRUNCATE

TRUNCATE — 清空一个表或者一组表

大纲

TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ]
    [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]

描述

TRUNCATE可以从一组表中快速地移除所有行。 它具有和在每个表上执行无条件DELETE相同的 效果,不过它会更快,因为它没有实际扫描表。此外,它会立刻回收磁盘空间, 而不是要求一个后续的VACUUM操作。在大表上 它最有用。

参数

name

要截断的表的名字(可以是模式限定的)。如果在表名前指定了 ONLY,则只会截断该表。如果没有指定ONLY, 该表及其所有后代表(如果有)都会被截断。可选地,可以在表名后指定 *来显式地包括后代表。

RESTART IDENTITY

自动重新开始被截断表的列所拥有的序列。

CONTINUE IDENTITY

不更改序列值。这是默认值。

CASCADE

自动截断所有对任一所提及表有外键引用的表以及任何由于 CASCADE被加入到组中的表。

RESTRICT

如果任一表上具有来自命令中没有列出的表的外键引用,则拒绝截断。这是默认值。

注解

要截断一个表,你必须具有其上的TRUNCATE特权。

TRUNCATE在要操作的表上要求一个 ACCESS EXCLUSIVE锁,这会阻塞所有其他在该表上的 并发操作。当指定RESTART IDENTITY时,任何需要被 重新开始的序列也会被排他地锁住。如果要求表上的并发访问,那么 应该使用DELETE命令。

TRUNCATE不能被用在被其他表外键引用的表上, 除非那些表也在同一个命令中被阶段。这些情况中的可行性检查将会 要求表扫描,并且重点不是为了做扫描。CASCADE 选项可以被用来自动地包括所有依赖表 — 但使用它时要非常 小心,否则你可能丢失数据! 特别注意的是,当要被截断的表是一个分区时,兄弟节点分区不会受到影响,但是所有的引用表都发生级联,他们的分区也没有区别。

TRUNCATE将不会引发表上可能存在的任何 ON DELETE触发器。但是它将会引发 ON TRUNCATE触发器。如果在这些表的任意一个 上定义了ON TRUNCATE触发器,那么所有的 BEFORE TRUNCATE触发器将在任何截断发生之前 被引发,而所有AFTER TRUNCATE触发器将在最后 一次截断完成并且所有序列被重置之后引发。触发器将以表被处理的顺 序被引发(首先是那些被列在命令中的,然后是由于级联被加入的)。

TRUNCATE不是 MVCC 安全的。截断之后, 如果并发事务使用的是一个在截断发生前取得的快照, 表将对这些并发事务呈现为空。详见第 13.5 节。

从表中数据的角度来说,TRUNCATE是事务安全的: 如果所在的事务没有提交,阶段将会被安全地回滚。

在指定了RESTART IDENTITY时,隐含的 ALTER SEQUENCE RESTART操作也会被事务性地完成。 也就是说,如果所在事务没有提交,它们也将被回滚。注意如果 事务回滚前在被重启序列上还做了额外的序列操作,这些操作在序列上的效果 也将被回滚,但是它们在currval()上的效果不会被回滚。也就 是说,在事务之后, currval()将继续反映在失败事务内得到的 最后一个序列值,即使序列本身可能已经不再与此一致。这和失败事务之后 currval()的通常行为类似。

TRUNCATE当前不支持外部表。 这表示如果一个指定的表具有任何外部的后代表,这个命令将会失败。

示例

截断表bigtablefattable

TRUNCATE bigtable, fattable;

做同样的事情,并且还重置任何相关联的序列发生器:

TRUNCATE bigtable, fattable RESTART IDENTITY;

截断表othertable,并且级联地截断任何通过 外键约束引用othertable的表:

TRUNCATE othertable CASCADE;

兼容性

SQL:2008 标准包括了一个TRUNCATE命令, 语法是TRUNCATE TABLE tablename 。子句 CONTINUE IDENTITY/RESTART IDENTITY 也出现在了该标准中,但是含义有些不同。这个命令的一些并发行为被标准 留给实现来定义,因此如果必要应该考虑上述注解并且与其他实现进行比较。

参见

DELETE


阅读全文
以上是鳄鱼CMS为你收集整理的 PostgreSQL TRUNCATE全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  PostgreSQL 分析器阶段

    PostgreSQL 分析器阶段

    2023-05-02

    50.3.1. 分析器50.3.2. 转换处理 分析器阶段由两部分组成: 分析器定义在gram.y和scan.l中,它使用Unix工具bison和flex构建。 转...

  •  Vimscript 预备知识

    Vimscript 预备知识

    2023-04-02 Vim教程

    阅读本书之前,请确保您的机器已经安装了最新版的Vim,本书写作时Vim的最新版本是7.3。 新版本的Vim会向后兼容,所以本书中的内...

  • vim 映射 Vimscript Operator-Pending映射

    vim 映射 Vimscript Operator-Pending映射

    2023-06-14 Vim教程

    这一章我们将来探索Vim映射系统中另外一个神奇的部分:“Operator-Pending映射”。开始之前,我们先解释下这里面的几个词含义。...

  • svg直线动画 SVG 直线

    svg直线动画 SVG 直线

    2023-05-06 SVG教程

    SVG line line 元素用于绘制直线;它取两个点的位置作为属性,指定这条线的起点和终点位置。SVG 直线 - line line 元素是用来创...

  • symbol对象 XSL-FO region-body 对象

    symbol对象 XSL-FO region-body 对象

    2023-04-09 XSL-FO教程

    XSL-FO region-body 对象XSL-FO 参考手册使用 XSL-FO 的时候,一个页面的主体区域是通过 region-body对象定义的。 定义和用法 fo...

© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们