SQL COMMAND · 表与视图
CREATE MATERIALIZED VIEW
定义一个新物化视图
define a new materialized view
CREATE表与视图引入 9.3现存至 20 devel2 次语法变更
- 动词
CREATE- 对象
MATERIALIZED VIEW- 分组
- 表与视图
- 引入版本
- 9.3
- 状态
- 现存
- 语法变更次数
- 2
- 手册小节数
- 4
版本轨迹
相对 PostgreSQL 17 语法未变,正文有更新。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
语法概要
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] [ USING method ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ]
描述
CREATE MATERIALIZED VIEW 定义一个基于查询的物化视图。在发出该命令时,会执行该查询并用其结果填充该视图(除非使用了
WITH NO DATA),之后可以使用
REFRESH MATERIALIZED VIEW 来刷新它。
CREATE MATERIALIZED VIEW 类似于
CREATE TABLE AS,不过它还会记住用于初始化该视图的查询,以便后续按需刷新。物化视图具有很多与表相同的属性,但不支持临时物化视图。
CREATE MATERIALIZED VIEW 要求对该物化视图所用的模式具有 CREATE 权限。
参数
IF NOT EXISTS如果已存在同名物化视图,则不要抛出错误。在这种情况下会发出一条提示。请注意,不能保证现有的物化视图与原本会创建出来的那个物化视图有任何相似之处。
table_name要创建的物化视图名称(可以带模式限定)。该名称必须与同一模式中的任何其他关系(表、序列、索引、视图、物化视图或外部表)的名称不同。
column_name新物化视图中的列名。如果没有提供列名,则采用查询输出列的名称。
USINGmethod该可选子句指定用于存储新物化视图内容的表访问方法;该方法必须是
TABLE类型的访问方法。详见第 62 章。如果未指定此选项,则会为新物化视图选择默认表访问方法。详见 default_table_access_method。WITH (storage_parameter[=value] [, ... ] )该子句为新物化视图指定可选的存储参数;更多信息见 CREATE TABLE 文档中的存储参数。凡是
CREATE TABLE支持的参数,CREATE MATERIALIZED VIEW也同样支持。另见 CREATE TABLE。TABLESPACEtablespace_nametablespace_name是在其中创建新物化视图的表空间名称。如果没有指定,将查阅 default_tablespace。query一个
SELECT、TABLE或VALUES命令。该查询将在一种安全受限的操作中运行。特别是,调用那些自身会创建临时表的函数将会失败。另外,在该查询运行期间,search_path 会被临时改为pg_catalog, pg_temp。WITH [ NO ] DATA该子句指定是否在创建时填充物化视图。如果不填充,则该物化视图会被标记为不可扫描,在使用
REFRESH MATERIALIZED VIEW之前不能查询。
兼容性
CREATE MATERIALIZED VIEW 是一种
PostgreSQL 扩展。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 18← 17正文更新
正文更新PostgreSQL 17← 16正文更新
正文更新PostgreSQL 15← 14正文更新
正文更新PostgreSQL 14← 13正文更新
正文更新PostgreSQL 13← 12正文更新
正文更新PostgreSQL 12← 11语法变化
+ [ (column_name [, ...] ) ]+ [ USING method ]正文更新PostgreSQL 9.5← 9.4语法变化
+ CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name正文更新PostgreSQL 9.3← 9.2新增此命令
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
TRUNCATE | TRUNCATE | — | 8.43 次 | |
| 清空一个表或一组表 | 现存 | |||
CREATE MATERIALIZED VIEW | CREATE | MATERIALIZED VIEW | 122 次 | |
| 定义一个新物化视图 | 现存 | |||
ALTER MATERIALIZED VIEW | ALTER | MATERIALIZED VIEW | 168 次 | |
| 更改一个物化视图的定义 | 现存 | |||
DROP MATERIALIZED VIEW | DROP | MATERIALIZED VIEW | — | |
| 移除一个物化视图 | 现存 | |||
REFRESH MATERIALIZED VIEW | REFRESH | MATERIALIZED VIEW | 9.41 次 | |
| 替换物化视图的内容 | 现存 | |||
CREATE SEQUENCE | CREATE | SEQUENCE | 188 次 | |
| 定义一个新的序列发生器 | 现存 | |||
ALTER SEQUENCE | ALTER | SEQUENCE | 1810 次 | |
| 更改序列发生器的定义 | 现存 | |||
DROP SEQUENCE | DROP | SEQUENCE | 8.23 次 | |
| 移除一个序列 | 现存 | |||
CREATE TABLE | CREATE | TABLE | 1920 次 | |
| 定义一个新表 | 现存 | |||
ALTER TABLE | ALTER | TABLE | 1826 次 | |
| 更改一个表的定义 | 现存 | |||
DROP TABLE | DROP | TABLE | 8.23 次 | |
| 移除一个表 | 现存 | |||
CREATE TABLE AS | CREATE | TABLE AS | 1911 次 | |
| 根据查询结果定义一个新表 | 现存 | |||
CREATE VIEW | CREATE | VIEW | 9.47 次 | |
| 定义一个新视图 | 现存 | |||
ALTER VIEW | ALTER | VIEW | 145 次 | |
| 更改视图的定义 | 现存 | |||
DROP VIEW | DROP | VIEW | 8.24 次 | |
| 移除一个视图 | 现存 | |||