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 表:

电影film_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 选项以递归方式删除视图及其从属对象。