Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Melhores práticas/ Recursos avançados/ Desacoplamento e reconstrução automática de exibição do GaussDB(DWS)
Atualizado em 2024-05-09 GMT+08:00

Desacoplamento e reconstrução automática de exibição do GaussDB(DWS)

Para resolver o problema de que os objetos da tabela base não podem ser modificados independentemente devido à dependência de exibição e tabela, o GaussDB(DWS) implementa desacoplamento e reconstrução de exibição. Este documento descreve os cenários de aplicação e os métodos de utilização da função de reconstrução automática da exibição.

Cenário

GaussDB(DWS) usa identificadores de objeto (OIDs) para armazenar relações de referência entre objetos. Quando uma exibição é definida, o OID do objeto de banco de dados do qual a exibição depende é vinculado a ela. Não importa como o nome da exibição muda, a dependência não muda. Se você modificar algumas colunas na tabela base, um erro será relatado porque as colunas estão fortemente vinculadas a alguns objetos. Se você quiser excluir uma coluna de tabela ou toda a tabela, precisará usar a palavra-chave cascade para excluir as exibições associadas. Depois que a coluna da tabela for excluída ou a tabela for recriada, você precisará recriar as exibições de diferentes níveis, uma por uma. Isso aumenta a carga de trabalho e deteriora a usabilidade.

Para resolver esse problema, o GaussDB(DWS) 8.1.0 desacopla as exibições de suas tabelas base dependentes ou outros objetos de banco de dados exibições, sinônimos, funções e colunas de tabela), para que esses objetos possam ser excluídos independentemente. Depois que a tabela base for reconstruída, você poderá executar o comando ALTER VIEW view_name REBUILD para reconstruir a dependência. Em 8.1.1, a reconstrução automática é implementada. As relações de dependência podem ser reconstruídas automaticamente sem serem percebidas. Depois que a reconstrução automática for ativada, podem ocorrer conflitos de bloqueio. Portanto, não é aconselhável ativar a reconstrução automática.

Uso

  1. Crie um cluster no console de gerenciamento. Para obter detalhes, consulte a seção Criação de um cluster.
  2. Ative o parâmetro de GUC view_independent.

    O parâmetro de GUC view_independent controla se uma exibição deve ser desacoplada de seus objetos. Este parâmetro está desativado por padrão. Você precisa ativar manualmente o parâmetro. Para ativar o parâmetro view_independent, efetue logon no console de gerenciamento e clique no nome do cluster. Na página Cluster Details exibida, clique na guia Parameters, procure por view_independent, modifique o parâmetro e salve a modificação.

  3. Use o DAS para se conectar a um cluster. Localize o cluster necessário na lista de clusters e clique em Log In na coluna Operation. Na página do DAS exibida, digite o nome do usuário, o nome do banco de dados e a senha e teste a conexão. Se a conexão for bem-sucedida, faça logon no cluster. Para obter detalhes, consulte Uso do DAS para conectar-se a um cluster.

  4. Crie uma tabela de exemplo t1 e insira dados na tabela.

    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. Crie a exibição v1 que depende da tabela t1 e crie a exibição v11 que depende da exibição v1. Consulte exibição 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. Depois que a tabela t1 é excluída, um erro é relatado quando você consulta a exibição v11. No entanto, as exibições ainda existem.

    GaussDB(DWS) fornece a exibição GS_VIEW_INVALID para consultar todas as exibições inválidas visíveis para o usuário. Se a tabela base, função ou sinônimo de que a exibição depende for anormal, a coluna validtype da exibição será exibida 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. Em um cluster de uma versão anterior após a recriação da tabela t1, a exibição é automaticamente recriada. As exibições são automaticamente atualizadas somente quando são usadas.

     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)