使用 DROP TABLE 命令从数据库中删除现有表以及 PostgreSQL 数据库中的数据。只有表的所有者才能销毁表。

语法

DROP TABLE [IF EXISTS] [<table1>, <table2>...] [CASCADE | RESTRICT]; 

以下代码将删除 employee 表:

DROP TABLE IF EXISTS employee; 

使用 IF EXISTS 选项仅删除数据库中存在的表。如果指定的表在数据库中不存在,那么它会给出警告并跳过drop命令。

如果一个表正在其他表、视图等中使用,那么它不会从数据库中删除,因为默认模式是 RESTRICT。例如,以下部门表在员工表中作为外键被引用。

CREATE TABLE employee(
	emp_id INT PRIMARY KEY,
	first_name VARCHAR(50) NOT NULL,
	last_name VARCHAR(50) NOT NULL,
	gender CHAR(1),
	dept_id INT NOT NULL,
	    
    FOREIGN KEY (dept_id) REFERENCES department(dept_id)
);
	
CREATE TABLE department (
	dept_id INT PRIMARY KEY,
	dept_name VARCHAR(100) NOT NULL
); 

现在,尝试删除部门表将引发错误,如下所示。

PostgreSQL 删除表

使用CASCADE强制删除表,即使它正在其他对象中使用。

DROP TABLE department CASCADE; 

PostgreSQL 删除表

如果表被视图或外键约束引用,则使用 CASCADE 参数删除视图、过程等依赖对象,但对于外键,它只会从子表中删除外键约束,而不是子表本身。

指定两个或多个以逗号分隔的表以删除多个表。

DROP TABLE person, employee; 

如果您想删除表中的所有数据而不删除表,请使用 DELETE 或 TRUNCATE TABLE 命令。