本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
刪除資料表中的所有資料列,但不執行資料表掃描:此操作是速度比非限定 DELETE 操作更快的替代方案。若要執行 TRUNCATE 命令,您必須擁有 TRUNCATE TABLE 許可、資料表擁有者或超級使用者。若要授予截斷資料表的權限,請使用 GRANT 命令。
TRUNCATE 比 DELETE 更有效率,而且不需要 VACUUM 和 ANALYZE。不過請注意,TRUNCATE 會遞交其執行所在的交易。
語法
TRUNCATE [ TABLE ] table_name
此命令也適用於具體化視觀表。
TRUNCATE materialized_view_name
參數
- TABLE
-
選用的關鍵字。
- table_name
-
暫時性或持久性資料表。只有資料表的擁有者或超級使用者可將它截斷。
您可以截斷任何資料表,包括外部索引鍵限制條件中參考的資料表。
您不需要在截斷資料表之後將它清空。
- materialized_view_name
-
具體化視觀表。
您可以截斷用於 將擷取串流到具體化視觀表 的具體化視觀表。
使用須知
TRUNCATE 命令會遞交其執行所在的交易;因此您無法轉返 TRUNCATE 操作,且 TRUNCATE 命令可能會在遞交本身的同時,遞交其他操作。
範例
使用 TRUNCATE 命令可刪除 CATEGORY 資料表中的所有資料列:
truncate category;
嘗試轉返 TRUNCATE 操作:
begin;
truncate date;
rollback;
select count(*) from date;
count
-------
0
(1 row)
DATE 資料表會在 ROLLBACK 命令之後保持空白,因為 TRUNCATE 命令會自動遞交。
下列範例會使用 TRUNCATE 命令,刪除具體化視觀表中的所有資料列。
truncate my_materialized_view;
它會刪除具體化視觀表中的所有記錄,並保持具體化視觀表及其結構描述不變。在查詢中,具體化視觀表名稱是一個範例。