2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

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.6 節

TRUNCATE 對於表中的資料是事務安全的:如果周圍的事務未提交,則截斷將被安全地回滾。

當指定 RESTART IDENTITY 時,隱含的 ALTER SEQUENCE RESTART 操作也是事務性的;也就是說,如果周圍的事務未提交,它們將被回滾。請注意,如果在事務回滾之前對重新啟動的序列執行了任何其他序列操作,則這些操作對序列的影響將被回滾,但對 currval() 的影響不會;也就是說,在事務回滾後, currval() 將繼續反映失敗事務中獲得的最後一個序列值,儘管序列本身可能不再與該值一致。這類似於失敗事務後 currval() 的常規行為。

TRUNCATE 可用於外部表,如果外部資料包裝器支援的話,例如,請參閱 postgres_fdw

示例

截斷表 bigtablefattable

TRUNCATE bigtable, fattable;

同上,並重置所有關聯的序列生成器

TRUNCATE bigtable, fattable RESTART IDENTITY;

截斷表 othertable,並級聯到任何透過外部索引鍵約束引用 othertable 的表

TRUNCATE othertable CASCADE;

相容性

SQL:2008 標準包含一個 TRUNCATE 命令,語法為 TRUNCATE TABLE tablenameCONTINUE IDENTITY/RESTART IDENTITY 子句也出現在該標準中,但含義略有不同但相關。該命令的一些併發行為在標準中被留給實現定義,因此如果需要,應考慮上述注意事項並與其他實現進行比較。

另請參閱

DELETE

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。