数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS)视图解耦与自动重建:使用方法

时间:2024-06-25 17:29:37

使用方法

  1. 在管理控制台上创建集群,具体操作步骤请参考创建集群
  2. 打开GUC参数view_independent参数。

    视图解耦功能由GUC参数view_independent进行控制,默认关闭。使用时需要用户手动打开,可登录管理控制台后,单击集群名称,进入“集群详情”页面,单击“参数修改”页签,并在“参数列表”模块搜索view_independent参数,修改后保存。

  3. 使用DAS连接集群。在集群列表中找到所需要的集群,单击“操作”栏中的“登录”按钮,跳转至数据库管理服务(DAS)页面,填写登录用户名、数据库名称、密码信息后测试连接,测试无误后登录集群。更多详细步骤请参考使用DAS连接集群

  4. 创建示例表t1并插入数据。

    1
    2
    3
    SET current_schema='public';
    CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a);
    INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b');
    

  5. 创建视图v1依赖表t1,创建视图v11依赖视图v1。查询视图v11。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE VIEW v1 AS SELECT a, b FROM t1;
    CREATE VIEW v11 AS SELECT a FROM v1;
    
    SELECT * FROM v11;
     a
    ---
     1
     2
    (2 rows)
    

  6. 删除表t1后,查询视图v11会因表t1不存在而报错,但视图是依旧存在的。

    GaussDB (DWS)提供GS_VIEW_INVALID视图查询当前用户可见的所有不可用的视图。如果该视图依赖的基础表或函数或同义词存在异常,该视图validtype列显示为“invalid”。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    DROP TABLE t1; 
    
    SELECT * FROM v11;
    ERROR:  relation "public.t1" does not exist  
    
    SELECT * FROM gs_view_invalid;
      oid   | schemaname | viewname | viewowner |         definition          | validtype
    --------+------------+----------+-----------+-----------------------------+-----------
     213563 | public     | v1       | dbadmin   | SELECT a, b FROM public.t1; | invalid
     213567 | public     | v11      | dbadmin   | SELECT a FROM public.v1;    | invalid
    (2 rows)
    

  7. 8.3.0之前的历史版本集群,重建表t1后,视图自动重建。视图只有使用才能自动刷新。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a);
    INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b');
      
    SELECT * from v1;
     a | b
    ---+---
     1 | 1
     2 | 2
    (2 rows)
    
    SELECT * FROM gs_view_invalid;
      oid   | schemaname | viewname | viewowner |        definition        | validtype
    --------+------------+----------+-----------+--------------------------+-----------
     213567 | public     | v11      | dbadmin   | SELECT a FROM public.v1; | invalid
    (1 row)
    
    SELECT * from v11;
     a 
    ---
     1 
     2 
    (2 rows)
    
    SELECT * FROM gs_view_invalid;
     oid | schemaname | viewname | viewowner | definition | validtype
    -----+------------+----------+-----------+------------+-----------
    (0 rows)
    

  8. 8.3.0及以上版本集群,重建表t1后,视图不会自动重建,执行ALTER VIEW REBUILD操作后视图才能自动刷新。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a);
    INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b');
      
    SELECT * from v1;
     a | b
    ---+---
     1 | 1
     2 | 2
    (2 rows)
    
    SELECT * FROM gs_view_invalid;
      oid   | schemaname | viewname | viewowner |          definition         | validtype
    --------+------------+----------+-----------+-----------------------------+-----------
     213563 | public     | v1       | dbadmin   | SELECT a, b FROM public.t1; | invalid
     213567 | public     | v11      | dbadmin   | SELECT a FROM public.v1;    | invalid
    (1 row)
    
    ALTER VIEW ONLY v1 REBUILD;
    
    SELECT * FROM gs_view_invalid;
      oid   | schemaname | viewname | viewowner |        definition        | validtype
    --------+------------+----------+-----------+--------------------------+-----------
     213567 | public     | v11      | dbadmin   | SELECT a FROM public.v1; | invalid
    (1 rows)
    

support.huaweicloud.com/bestpractice-dws/dws_05_0061.html