CREATE VIEW
CREATE VIEW define uma nova visualização persistente. O Aurora DSQL não aceita visualizações temporárias. Somente visualizações permanentes.
Sintaxe compatível
CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Descrição
CREATE VIEW define a visualização de uma consulta. A visualização não é materializada fisicamente. Em vez disso, a consulta é executada sempre que a visualização é consultada em uma consulta.
CREATE or REPLACE VIEW é semelhante, mas, se já houver uma visualização com o mesmo nome, ela será substituída. A nova consulta deve gerar as mesmas colunas que foram geradas pela consulta de visualização existente (ou seja, os mesmos nomes de coluna na mesma ordem e com os mesmos tipos de dados), mas existe a possibilidade de outras colunas serem adicionadas ao final da lista. Os cálculos que dão origem às colunas de saída podem ser diferentes.
Se um nome de esquema (como CREATE VIEW myschema.myview ...) for fornecido, a visualização será criada no esquema especificado. Do contrário, a visualização será criada no esquema atual.
O nome da visualização deve ser diferente do nome de qualquer outra relação (tabela, índice e visualização) no mesmo esquema.
Parâmetros
CREATE VIEW aceita vários parâmetros para controlar o comportamento de visualizações atualizáveis automaticamente.
RECURSIVE-
Cria uma visualização recursiva. A sintaxe:
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;é equivalente aCREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;.É necessário especificar uma lista de nomes de coluna de visualização para uma visualização recursiva.
name-
O nome da visualização a ser criada, que pode ser opcionalmente qualificada para o esquema. É necessário especificar uma lista de nomes para uma visualização recursiva.
column_name-
Uma lista opcional de nomes a serem usados para as colunas da visualização. Se não for fornecido, o nome da coluna será deduzido da consulta.
WITH ( view_option_name [= view_option_value] [, ... ] )-
Essa cláusula especifica parâmetros opcionais para uma visualização. Os parâmetros a seguir são aceitos.
-
check_option (enum): esse parâmetro pode serlocaloucascaded, e é equivalente a especificarWITH [ CASCADED | LOCAL ] CHECK OPTION. -
security_barrier (boolean): deve ser usado se a visualização for destinada a oferecer segurança em nível de linha. No momento, o Aurora DSQL não oferece suporte à segurança por linha, mas essa opção ainda fará com que as condiçõesWHEREda visualização (e quaisquer condições usando operadores marcados comoLEAKPROOF) sejam avaliadas primeiro. -
security_invoker (boolean): esta opção faz com que as relações básicas subjacentes sejam cotejadas como os privilégios do usuário da visualização e não do proprietário da visualização. Consulte as observações abaixo para obter todos os detalhes.
Todas as opções acima podem ser alteradas nas visualizações existentes usando
ALTER VIEW. -
query-
Um comando
SELECTouVALUESque fornecerá as colunas e linhas da visualização. WITH [ CASCADED | LOCAL ] CHECK OPTION-
Esta opção controla o comportamento das visualizações atualizáveis automaticamente. Quando ela for especificada, os comandos
INSERTeUPDATEna visualização serão verificados para garantir que as novas linhas satisfaçam a condição de definição da visualização (ou seja, as novas linhas são verificadas para garantir que possam ser vistas na visualização). Do contrário, a atualização será rejeitada. SeCHECK OPTIONnão for especificada, os comandosINSERTeUPDATEna visualização poderão criar linhas que não são visíveis na visualização.LOCAL: as novas linhas só são verificadas em relação às condições definidas diretamente na própria visualização. Quaisquer condições definidas nas visualizações básicas subjacentes não são verificadas (a menos que também especifiquem aCHECK OPTION).CASCADED: as novas linhas são verificadas em relação às condições da visualização e de todas as visualizações básicas subjacentes. SeCHECK OPTIONfor especificada, masLOCALeCASCADEDnão forem especificadas, a opçãoCASCADEDserá adotada.nota
CHECK OPTIONnão pode ser usada com visualizaçõesRECURSIVE.CHECK OPTIONé aceita apenas em visualizações que são atualizáveis automaticamente.
Observações
Use a instrução DROP VIEW para descartar visualizações.
Os nomes e tipos de dados das colunas da visualização devem ser cuidadosamente considerados. Por exemplo, “CREATE VIEW vista AS SELECT ‘Hello World’;” não é recomendado porque o nome da coluna é padronizado como ?column?;. Além disso, o tipo de dados padrão da coluna é text, que talvez não seja o que você queria.
Uma abordagem mais adequada é especificar explicitamente o nome da coluna e o tipo de dados, como CREATE VIEW vista AS SELECT text 'Hello World' AS hello;.
Por padrão, o acesso às relações básicas subjacentes referidas na visualização é determinado pelas permissões do proprietário da visualização. Em alguns casos, isso pode ser usado para fornecer acesso seguro, mas restrito, às tabelas subjacentes. Entretanto, nem todas as visualizações estão protegidas contra adulteração.
-
Se a visualização tiver a propriedade
security_invokerdefinida como verdadeira, o acesso às relações básicas subjacentes será determinado pelas permissões do usuário que está executando a consulta, e não pelo proprietário da visualização. Portanto, o usuário de uma visualização do tipo security_invoker deve ter as permissões relevantes na visualização e nas respectivas relações básicas subjacentes. -
Se alguma das relações básicas subjacentes for uma visualização do tipo security_invoker, ela será tratada como se tivesse sido acessada diretamente da consulta original. Desse modo, uma visualização do tipo security_invoker sempre verificará suas relações básicas subjacentes usando as permissões do usuário atual, mesmo que seja acessada de uma visualização sem a propriedade
security_invoker. -
As funções chamadas na visualização são tratadas da mesma forma que se tivessem sido chamadas diretamente da consulta usando a visualização. Portanto, o usuário de uma visualização deve ter permissões para chamar todas as funções usadas pela visualização. As funções na visualização são executadas com os privilégios do usuário que está executando a consulta ou do proprietário da função, dependendo se as funções estão definidas como
SECURITY INVOKERouSECURITY DEFINER. -
O usuário que está criando ou substituindo uma visualização deve ter privilégios
USAGEem todos os esquemas mencionados na consulta da visualização para pesquisar os objetos referidos nesses esquemas. -
Quando
CREATE OR REPLACE VIEWé usada em uma visualização existente, somente a regra de definiçãoSELECTda visualização, mais qualquer parâmetroWITH ( ... )e a respectivaCHECK OPTION, é alterada. Outras características da visualização, como propriedade, permissões e regras não SELECT, permanecem inalteradas. Para substituir uma visualização, ela deve pertencer a você (isso inclui ser membro do perfil de proprietário).
Visualizações atualizáveis
As visualizações simples são atualizáveis automaticamente: o sistema permitirá que as instruções INSERT, UPDATE e DELETE sejam usadas na visualização da mesma forma que em uma tabela normal. Uma visualização é atualizável automaticamente se satisfizer todas as seguintes condições:
-
A visualização deve ter exatamente uma entrada na respectiva lista
FROM, que deve ser uma tabela ou outra visualização atualizável. -
A definição da visualização não deve conter cláusulas
WITH,DISTINCT,GROUP BY,HAVING,LIMITouOFFSETno nível superior. -
Ela não deve conter operações de conjunto (
UNION,INTERSECTouEXCEPT) no nível superior. -
A lista de seleção da visualização não deve conter agregados, funções de janela ou funções de retorno de conjuntos.
Uma visualização atualizável automaticamente pode conter uma combinação de colunas atualizáveis e não atualizáveis. Uma coluna é atualizável se for uma referência simples a uma coluna atualizável da relação básica subjacente. Caso contrário, a coluna será somente leitura e ocorrerá um erro se uma instrução INSERT ou UPDATE tentar atribuir um valor a ela.
Por padrão, uma visualização mais complexa que não satisfaça todas essas condições é somente leitura: o sistema não permite inserção, atualização ou exclusão na visualização.
nota
O usuário que executa a inserção, atualização ou exclusão na visualização deve ter o privilégio correspondente de inserção, atualização ou exclusão na visualização. Por padrão, o proprietário da visualização deve ter os privilégios relevantes nas relações básicas subjacentes, enquanto o usuário que executa a atualização não precisa de nenhuma permissão nas relações básicas subjacentes. Entretanto, se a visualização tiver security_invoker definido como verdadeiro, o usuário que executa a atualização, em vez do proprietário da visualização, deverá ter os privilégios relevantes nas relações básicas subjacentes.
Exemplos
Para criar uma visualização composta de todos os filmes de comédia.
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
Crie uma visualização com LOCAL CHECK OPTION.
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
Cria uma visualização recursiva.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
Compatibilidade
CREATE OR REPLACE VIEW é uma extensão da linguagem PostgreSQL. A cláusula WITH ( ... ) também é uma extensão, assim como as visualizações de barreiras de segurança e as visualizações security_invoker. O Aurora DSQL é compatível com essas extensões de linguagem.