提要:在本教程中,我们将向您展示可更新视图的需求以及如何在 PostgreSQL 中创建可更新视图。

PostgreSQL 视图在满足以下条件时可以更新:

  • 该视图的定义的查询必须在 FROM 子句中只有一个条目,该条目可以是一个表或另一个可更新的视图。
  • 定义的查询不能在顶层包含以下子句之一:GROUP BYHAVINGLIMITOFFSETDISTINCTWITHUNIONINTERSECTEXCEPT
  • 选择列表不得包含任何窗口函数或设置返回函数或任何聚合函数,如 SUMCOUNTAVGMINMAX 等。

可更新视图可以同时包含可更新列和不可更新字段。如果尝试插入或更新不可更新的字段,PostgreSQL 将抛出错误。

当在可更新视图执行 INSERTUPDATEDELETE 等更新操作时,PostgreSQL 将把这个语句转换成相应数据表的语句。

如果在视图的定义查询中有 WHERE 条件,则仍然可以更新或删除在视图中不可见的行。如果要避免这种情况,则可以在定义视图时使用 CHECK OPTION

可更新视图示例

首先,我们使用 CREATE VIEW 语句创建一个名为 usa_cities 的视图。该视图源于包含属于美国的所有城市数据的 city 表。

CREATE VIEW usa_cities AS SELECT
 city,
 country_id
FROM
 city
WHERE
 country_id = 103;

下一步,通过简单的 SELECT 语句可以检查该视图的数据:

SELECT
 *
FROM
 usa_cities;

然后,通过 usa_cities 视图往 city 表里插入新城市:

INSERT INTO usa_cities (city, country_id)
VALUES('San Jose', 103);

之后,检查一下 city 表里的数据:

SELECT
 city,
 country_id
FROM
 city
WHERE
 country_id = 103
ORDER BY
 last_update DESC;

最后,可以通过 usa_cities 视图删除记录:

DELETE
FROM
 usa_cities
WHERE
 city = 'San Jose';
上一篇:管理视图
下一篇:物化视图