400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 FAQ
定义一个新的视图。
CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW name
[ ( column_name [, ...] ) ]
[ WITH ( view_option_name [= view_option_value] [, ... ] ) ]
AS query
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
CREATE VIEW 定义查询的视图。 该视图未物化。 而是,每次在查询中引用视图时运行查询。 注意:如果是持续聚集视图,则会被物化。
CREATE OR REPLACE VIEW 类似,但是如果已经存在相同名称的视图,则将其替换。 新查询必须生成与现有视图查询生成列相同的列 (即,相同的列名以相同的顺序,并且具有相同的数据类型),但是它可能会将其他列添加到列表的末尾。 产生输出列的计算可能完全不同。
如果指定了模式名称,则将在指定的模式中创建视图。 否则,它将在当前模式中创建。 临时视图存在于特殊的模式中,因此在创建临时视图时可能不会给出模式名称。 视图的名称必须与同一模式中的任何其他视图,表,序列,索引或外部表的名称不同。
TEMPORARY | TEMP
RECURSIVE
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;
CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;
name
column_name
WITH ( view_option_name [= view_option_value] [, ... ] )
query
YMatrix 数据库中的视图为只读。 系统不允许在视图上插入,更新或删除。 通过将视图上的重写规则创建为其他表上的适当操作,可以得到可更新视图的效果。 有关更多信息,请参见 CREATE RULE。
请注意,视图列的名称和数据类型将按照您想要的方式分配。例如:
CREATE VIEW vista AS SELECT 'Hello World';
是两种形式的错误形式:列名默认为 ?column?,列数据类型默认为 unknown。 如果要在视图结果中使用字符串文字,请使用类似以下内容的方法:
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
对视图中引用的表的访问权限是由视图所有者而不是当前用户(即使当前用户是超级用户)的权限决定的。 对于超级用户,这可能会造成混淆,因为超级用户通常可以访问所有对象。 在视图的情况下,如果超级用户不是视图的所有者,那么即使超级用户也必须被明确授予访问该视图中引用的表的权限。
但是,对视图中调用的函数的处理方式与使用视图直接从查询中直接调用它们的方式相同。 因此,视图的用户必须具有调用该视图使用的任何函数的权限。
如果使用 ORDER BY 子句创建视图, 则从视图执行 SELECT 时将忽略 ORDER BY 子句。
在现有视图上使用 CREATE OR REPLACE VIEW 时,仅更改视图定义的 SELECT 规则。 其他视图属性(包括所有权,权限和 non-SELECT 规则)保持不变。 您必须拥有视图才能替换它(包括作为拥有角色的成员)。
创建一个由所有喜剧电影组成的视图:
CREATE VIEW comedies AS SELECT * FROM films
WHERE kind = 'comedy';
这将创建一个视图,其中包含在创建视图时 film 表中的列。 尽管使用 * 来创建视图,但是稍后添加到表中的列将不属于视图。
创建一个获取前十名婴儿名字的视图:
CREATE VIEW topten AS SELECT name, rank, gender, year FROM
names, rank WHERE rank < '11' AND names.id=rank.id;
创建一个由 1 到 100 的数字组成的递归视图:
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS
VALUES (1)
UNION ALL
SELECT n+1 FROM nums_1_100 WHERE n < 100;
请注意,尽管此 CREATE VIEW 命令中的递归视图名称是模式限定的,但是其内部自引用不是模式限定的。 这是因为隐式创建的 CTE(Common Table Expressions) 名称不能通过模式限定。
如果指定了 CONTINUOUS 选项,则为持续聚集视图:
CREATE VIEW cv1 WITH (CONTINUOUS, POPULATE=false) AS
SELECT tag_id, COUNT(*), SUM(sensor)
FROM metrics GROUP BY tag_id;
SQL 标准为 CREATE VIEW 语句指定了 YMatrix 数据库中没有的一些附加功能。 标准中完整 SQL 命令的可选子句为:
CREATE OR REPLACE VIEW是 YMatrix 数据库语言的扩展。 临时视图的概念也是如此。