提要:在本教程中,你将学习到如何使用 PostgreSQL 的 DROP TABLE 语句来删除已存在的数据表。

PostgreSQL DROP TABLE 语法

要从数据库中删除一张已存在的表,可以使用如下的语法:

DROP TABLE [IF EXISTS] table_name [CASCADE | RESTRICT];

DROP TABLE 后面指定要删除的数据表。

如果删除一张不存在的表,PostgreSQL 将抛出错误。可以在 DROP TABLE 后面加上 IF EXISTS 参数来规避这个问题。

假设,要删除的表被视图、约束或其它对象引用,CASCADE 允许在删除表的同时,自动把那些依赖该表的对象同时删除。

RESTRICT 则,只要有任意对象依赖该表,在删除该表时,会被拒绝。PostgreSQL 默认使用的是 RESTRICT

可以同时删除多个表,只要在 DROP TABLE 后面跟上表的列表,表名之间用逗号分隔。

注意,只有 SUPERUSER、schema所有者和表所有者才有删除表的权限。

PostgreSQL DROP TABLE 示例

下面的语句用于删除 sjk66 的表:

DROP TABLE sjk66;

PostgreSQL 将抛出一个错误,因为 sjk66 表并不存在:

[Err] ERROR:  table "sjk66" does not exist

要规避这个错误,可以加上 IF EXISTS 参数:

DROP TABLE IF EXISTS sjk66;

接下来,我们创建 authorpage 两张新表,用于下面的演示:

CREATE TABLE author (
 author_id INT NOT NULL PRIMARY KEY,
 firstname VARCHAR (50),
 lastname VARCHAR (50)
);

CREATE TABLE page (
 page_id serial PRIMARY KEY,
 title VARCHAR (255) NOT NULL,
 CONTENT TEXT,
 author_id INT NOT NULL,
 FOREIGN KEY (author_id) REFERENCES author (author_id)
);

下面来删除 author 表:

DROP TABLE IF EXISTS author;

由于 page 表的约束依赖于 author 表,PostgreSQL 将抛出一个错误:

[Err] ERROR:  cannot drop table author because other objects depend on it
DETAIL:  constraint page_author_id_fkey on table page depends on table author
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

为此,需要在删除 author 表之间,删除所有依赖于它的其它对象。或者像下面这样,使用 CASCADE 参数:

DROP TABLE author CASCADE;

PostgreSQL 将 author 和依赖于它的 page 表都删除了。额外的,PostgreSQL 抛出了一个提示:

NOTICE:  drop cascades to constraint page_author_id_fkey on table page
上一篇:PostgreSQL 修改表
下一篇:PostgreSQL 清空表