PostgreSQL删除所有内容

你好,我想删除我的postgresql表中的所有数据,但不是表本身。 我怎么能这样做?

使用TRUNCATE TABLE命令。

PostgreSQL数据库中表格的内容可以通过几种方式删除。

使用sql删除表格内容:

删除一个表的内容:

 TRUNCATE table_name; DELETE FROM table_name; 

删除所有命名表的内容:

 TRUNCATE table_a, table_b, …, table_z; 

删除引用它们的命名表和表的内容(我将在后面的答案中更详细地解释它):

 TRUNCATE table_a, table_b CASCADE; 

使用pgAdmin删除表格内容:

删除一个表的内容:

 Right click on the table -> Truncate 

删除引用它的表格和表格的内容:

 Right click on the table -> Truncate Cascaded 

删除和截断的区别:

从文档:

DELETE从指定的表中删除满足WHERE子句的行。 如果WHERE子句不存在,其效果是删除表中的所有行。 http://www.postgresql.org/docs/9.3/static/sql-delete.html

TRUNCATE是一个PostgreSQL扩展,它提供了一个更快的机制来删除表中的所有行。 TRUNCATE快速删除一组表中的所有行。 它与每个表上的不合格DELETE具有相同的效果,但由于它实际上并不扫描表,所以速度更快。 此外,它立即回收磁盘空间,而不是要求后续的VACUUM操作。 这在大型表格上最有用。 http://www.postgresql.org/docs/9.1/static/sql-truncate.html

使用从其他表引用的表:

当你有一个以上的表的数据库表可能有关系。 作为一个例子,有三个表格:

 create table customers ( customer_id int not null, name varchar(20), surname varchar(30), constraint pk_customer primary key (customer_id) ); create table orders ( order_id int not null, number int not null, customer_id int not null, constraint pk_order primary key (order_id), constraint fk_customer foreign key (customer_id) references customers(customer_id) ); create table loyalty_cards ( card_id int not null, card_number varchar(10) not null, customer_id int not null, constraint pk_card primary key (card_id), constraint fk_customer foreign key (customer_id) references customers(customer_id) ); 

还有一些为这些表准备的数据:

 insert into customers values (1, 'John', 'Smith'); insert into orders values (10, 1000, 1), (11, 1009, 1), (12, 1010, 1); insert into loyalty_cards values (100, 'A123456789', 1); 

表订单引用表客户和表loyalty_cards引用表客户。 当您尝试从其他表/ s引用的表中截断/删除(其他表具有指向该表的外键约束)时,会出现错误。 要删除所有三个表中的内容,必须命名所有这些表(顺序不重要)

 TRUNCATE customers, loyalty_cards, orders; 

或者只是用CASCADE关键字引用的表(您可以命名更多的表,而不仅仅是一个)

 TRUNCATE customers CASCADE; 

这同样适用于pgAdmin。 右键单击customers表并selectTruncate Cascaded。

对于小型表, DELETE通常更快,并且需要更less的主动locking(对于繁重的并发负载):

 DELETE FROM tbl; 

没有WHERE条件。

对于中等或更大的表格,请使用TRUNCATE tbl ,例如@Greg过帐。