Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Data Warehouse Service/ Prácticas recomendadas / Desarrollo de datos/ Mejora de la eficiencia de desarrollo mediante la función de desacoplamiento y reconstrucción de vistas
Actualización más reciente 2026-09-29 GMT+08:00

Mejora de la eficiencia de desarrollo mediante la función de desacoplamiento y reconstrucción de vistas

Los objetos de la tabla base no se pueden modificar de forma independiente debido a la dependencia de la vista y la tabla. Para resolver este problema, DWS admite el desacoplamiento y la reconstrucción de vistas. Este documento describe cuándo y cómo utilizar la función de reconstrucción automática de vistas.

Escenario

DWS utiliza identificadores de objetos (OID) para almacenar relaciones de referencia entre objetos. Cuando se define una vista, el OID del objeto de la base de datos del que depende la vista se vincula a ella. No importa cómo cambie el nombre de la vista, la dependencia no cambia. Si modifica algunas columnas de la tabla base, se reportará un error porque las columnas están fuertemente vinculadas a algunos objetos. Si desea eliminar una columna de la tabla o la tabla completa, debe utilizar la palabra clave cascade para eliminar las vistas asociadas. Después de eliminar la columna de la tabla o volver a crear la tabla, debe volver a crear las vistas de diferentes niveles una por una. Esto aumenta la carga de trabajo y deteriora la usabilidad.

Para resolver este problema, DWS 8.1.0 desacopla las vistas de sus tablas base dependientes u otros objetos de la base de datos (vistas, sinónimos, funciones y columnas de tabla), para que estos objetos se puedan eliminar de forma independiente. Después de reconstruir la tabla base, puede ejecutar el comando ALTER VIEW REBUILD para reconstruir la dependencia. Como desarrollo, la versión 8.1.1 admite la reconstrucción automática. Las dependencias se pueden reconstruir automáticamente sin que el usuario se dé cuenta. Después de habilitar la reconstrucción automática, pueden producirse conflictos de bloqueo. Por lo tanto, se recomienda no habilitar la reconstrucción automática. En el clúster 8.2.1.200, la reconstrucción automática está deshabilitada y se utiliza la reconstrucción automática local. Es decir, los catálogos del sistema no se actualizan después de que las vistas se reconstruyen automáticamente. En este caso, las vistas no válidas siguen siendo inválidas, pero se pueden realizar operaciones DML en las vistas no válidas. Para actualizar los metadatos de la vista al estado válido, realice la operación ALTER VIEW REBUILD.

Uso

  1. Cree un clúster en la consola de DWS. Para obtener más información, consulte Creación de un clúster de DWS de almacenamiento y cómputo acoplados.
  2. Habilite el parámetro GUC view_independent.

    El parámetro GUC view_independent controla si se debe desacoplar una vista de sus objetos. Este parámetro está deshabilitado por defecto. Debe habilitar manualmente el parámetro. Para habilitar el parámetro view_independent, inicie sesión en la consola de DWS y haga clic en el nombre del clúster para ir a la página de detalles del clúster. Haga clic en la pestaña Parameters, busque view_independent, modifique el parámetro y guarde la modificación.

  3. Use the gsql client to connect to a DWS database (using the password you defined when creating the cluster).

    1
    gsql -d gaussdb -p 8000 -h 192.168.0.86 -U dbadmin -W password -r
    

    If the following information is displayed, the connection succeeded:

    1
    gaussdb=>
    

  4. Cree una tabla de ejemplo t1 e inserte datos en la tabla.

    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. Cree la vista v1 que depende de la tabla t1 y cree la vista v11 que depende de la vista v1. Consulte la vista 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. Después de eliminar la tabla t1, se reporta un error cuando se consulta la vista v11. Sin embargo, las vistas siguen existiendo.

    DWS proporciona la vista GS_VIEW_INVALID para consultar todas las vistas no válidas visibles para el usuario. Si la tabla base, la función o el sinónimo del que depende la vista es anormal, la columna validtype de la vista se muestra como "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. Después de que la tabla t1 se recrea en un clúster de una versión anterior a 8.2.1.200, la vista se recrea automáticamente. Las vistas se actualizan automáticamente solo cuando se utilizan.

     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
    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. Después de que se recrea la tabla t1 para un clúster de la versión 8.2.1.200 o posterior, la vista no se recrea automáticamente. La vista se puede actualizar automáticamente solo después de realizar la operación 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
    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)