PostgreSQL 下拉视图
在本教程中,您将学习如何使用 PostgreSQL DROP VIEW 语句从数据库中删除一个或多个视图。
摘要:在本教程中,您将学习如何使用 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 语句示例
请参阅 PostgreSQL Sakila 示例数据库中的以下 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);
以下语句创建一个 horror_film 基于视图调用的 film_master 视图:
CREATE VIEW horror_film
AS
SELECT
film_id,
title,
release_year,
length
FROM
film_master
WHERE
category = 'Horror';
以下语句还创建了一个 comedy_film 基于该视图调用的 film_master 视图:
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;
使用 PostgreSQL DROP VIEW 删除一个视图
以下示例使用该 DROP VIEW 语句删除 comedy_film 视图:
DROP VIEW comedy_film;
使用 PostgreSQL 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 。
要删除 view film_master ,您需要先删除其依赖对象或使用如下 CASCADE 选项:
DROP VIEW film_master
CASCADE;
此语句删除 film_master 视图及其依赖对象,即 horror_film . 它发布了以下通知:
NOTICE: drop cascades to view horror_film
使用 PostgreSQL DROP VIEW 删除多个视图
以下语句使用单个 DROP VIEW 语句删除多个视图:
DROP VIEW film_length_stat, film_category_stat;
概括
- 使用该
DROP VIEW语句从数据库中删除一个或多个视图。 - 使用该
IF EXISTS选项删除视图(如果存在)。 - 使用该
CASCADE选项以递归方式删除视图及其从属对象。