Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

DROP TABLE

从数据库中删除表。只有表的所有者、schema 所有者或超级用户才能删除表。

如果您正在尝试清空表中的行,而不是删除表,请使用 DELETE 或 TRUNCATE 命令。

DROP TABLE 删除目标表上存在的约束。可以使用一条 DROP TABLE 命令删除多个表。

针对外部表的 DROP TABLE 不能在事务 (BEGIN … END) 内使用。

语法

Copy
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

参数

IF EXISTS

一个子句,指示如果指定的表不存在,则命令不应进行任何更改,并返回一条指示表不存在的消息,而不是以错误终止。

此子句在编写脚本时很有用,可使在 DROP TABLE 针对不存在的表运行时脚本不会失败。

name

要删除的表的名称。

CASCADE

一个子句,用于指示自动删除依赖该表的对象,例如视图。

要使创建的视图不依赖于所引用的表,请在定义视图时包括 WITH NO SCHEMA BINDING 子句。有关更多信息,请参阅 CREATE VIEW

RESTRICT

一个子句,指示如果任何对象依赖该表,则不删除该表。此操作是默认操作。

示例

删除没有依赖项的表

以下示例创建一个名为 FEEDBACK 且没有依赖项的表,然后删除该表:

Copy
create table feedback(a int); drop table feedback;

如果表中包含的任何列被其他表引用,则 Amazon Redshift 会显示一条类似下面的消息,建议您使用 CASCADE 选项同时删除从属对象:

Copy
ERROR: cannot drop table category because other objects depend on it HINT: Use DROP ... CASCADE to drop the dependent objects too.

同时删除两个表

以下命令集创建一个 FEEDBACK 表和一个 BUYERS 表,然后在一条命令中同时删除这两个表:

Copy
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;

删除具有依赖项的表

以下步骤说明如何使用 CASCADE 开关删除名为 FEEDBACK 的表。

首先,使用 CREATE TABLE 命令创建一个名为 FEEDBACK 的简单表:

Copy
create table feedback(a int);

下一步,使用 CREATE VIEW 命令创建一个名为 FEEDBACK_VIEW 的视图,并使该视图依赖于 FEEDBACK 表:

Copy
create view feedback_view as select * from feedback;

以下示例删除 FEEDBACK 表,同时会删除 FEEDBACK_VIEW 视图,因为 FEEDBACK_VIEW 视图依赖于 FEEDBACK 表:

Copy
drop table feedback cascade;

查看表的依赖项

您可以创建一个视图,其中保存数据库中所有表的依赖关系信息。在删除指定的表之前,请先查询此视图,了解该表是否具有依赖项。

键入以下命令来创建 FIND_DEPEND 视图,该视图联接依赖项与对象引用:

Copy
create view find_depend as select distinct c_p.oid as tbloid, n_p.nspname as schemaname, c_p.relname as name, n_c.nspname as refbyschemaname, c_c.relname as refbyname, c_c.oid as viewoid from pg_catalog.pg_class c_p join pg_catalog.pg_depend d_p on c_p.relfilenode = d_p.refobjid join pg_catalog.pg_depend d_c on d_p.objid = d_c.objid join pg_catalog.pg_class c_c on d_c.refobjid = c_c.relfilenode left outer join pg_namespace n_p on c_p.relnamespace = n_p.oid left outer join pg_namespace n_c on c_c.relnamespace = n_c.oid where d_c.deptype = 'i'::"char" and c_c.relkind = 'v'::"char";

现在从 SALES 表创建 SALES_VIEW:

Copy
create view sales_view as select * from sales;

现在,查询 FIND_DEPEND 视图以查看数据库中的依赖项。将查询范围限制为 PUBLIC schema,如以下代码所示:

Copy
select * from find_depend where refbyschemaname='public' order by name;

此查询返回以下依赖项,表明如果在删除 SALES 表时使用 CASCADE 选项,还将删除 SALES_VIEW 视图:

Copy
tbloid | schemaname | name | viewoid | refbyschemaname | refbyname --------+------------+-------------+---------+-----------------+------------- 100241 | public | find_depend | 100241 | public | find_depend 100203 | public | sales | 100245 | public | sales_view 100245 | public | sales_view | 100245 | public | sales_view (3 rows)

使用 IF EXISTS 删除表

以下示例删除 FEEDBACK 表(如果存在);如果不存在该表,则不执行任何操作并返回一条消息:

Copy
drop table if exists feedback;

本页内容: