九月 9, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的DROP VIEW语句从数据库中删除一个或多个视图。
目录
PostgreSQL DROP VIEW 语句简介
DROP VIEW语句从数据库中删除视图。下面说明了DROP VIEW语句的语法:
DROP VIEW [IF EXISTS] view_name
[CASCADE | RESTRICT]
在这个语法中:
- 首先,在
DROP VIEW关键字后指定视图的名称。 - 其次,使用
IF EXISTS选项仅删除存在的视图。如果您不使用IF EXISTS选项并删除不存在的视图,PostgreSQL 将发出错误。但是,如果您使用IF EXISTS选项,PostgreSQL 只会发出通知。 - 第三,如果有任何对象依赖于视图,请使用
RESTRICT选项拒绝删除视图。RESTRICT选项是默认选项。如果使用CASCADE选项,则DROP VIEW会自动删除依赖于视图的对象以及依赖于这些对象的所有对象。
要使用单个语句删除多个视图,请在DROP VIEW关键字后面指定以逗号分隔的视图名称列表,如下所示:
DROP VIEW [IF EXISTS] view_name1, view_name2, ...;
要执行DROP VIEW语句,您必须是视图的所有者。
PostgreSQL DROP VIEW 语句示例
请参阅示例数据库中的film、film_category和category表,如下:

让我们为练习创建新的视图。
以下语句根据这些表中的信息创建一个视图:
CREATE VIEW film_master
AS
SELECT
film_id,
title,
release_year,
length,
name category
FROM
film
INNER JOIN film_category
USING (film_id)
INNER JOIN category
USING(category_id);
以下语句创建一个基于film_master视图实现的horror_film视图:
CREATE VIEW horror_film
AS
SELECT
film_id,
title,
release_year,
length
FROM
film_master
WHERE
category = 'Horror';
以下语句还创建了一个基于film_master视图实现的comedy_film视图:
CREATE VIEW comedy_film
AS
SELECT
film_id,
title,
release_year,
length
FROM
film_master
WHERE
category = 'Comedy';
以下语句创建一个按类别返回电影数量的视图:
CREATE VIEW film_category_stat
AS
SELECT
name,
COUNT(film_id)
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name;
以下创建一个视图,返回每个类别的电影总长度:
CREATE VIEW film_length_stat
AS
SELECT
name,
SUM(length) film_length
FROM category
INNER JOIN film_category USING (category_id)
INNER JOIN film USING (film_id)
GROUP BY name;
1) 使用 DROP VIEW 删除一个视图
以下示例使用DROP VIEW语句来删除comedy_film视图:
DROP VIEW comedy_film;
2) 使用 DROP VIEW 语句删除具有依赖对象的视图
以下语句使用DROP VIEW语句删除film_master视图:
DROP VIEW film_master;
PostgreSQL 发出错误:
ERROR: cannot drop view film_master because other objects depend on it
DETAIL: view horror_film depends on view film_master
HINT: Use DROP ... CASCADE to drop the dependent objects too.
SQL state: 2BP01
film_master有一个依赖对象,即horror_film视图。
要删除视图film_master,您需要首先删除其依赖对象,或使用CASCADE选项,如下:
DROP VIEW film_master
CASCADE;
该语句删除film_master视图及其依赖对象(即horror_film)。它发出如下通知:
NOTICE: drop cascades to view horror_film
3) 使用 DROP VIEW 删除多个视图
以下语句使用单个DROP VIEW语句删除多个视图:
DROP VIEW film_length_stat, film_category_stat;
概括
- 使用
DROP VIEW语句从数据库中删除一个或多个视图。 - 使用
IF EXISTS选项删除视图(如果存在)。 - 使用
CASCADE选项以递归方式删除视图及其依赖对象。