CREATE VIEW - Amazon Aurora DSQL

CREATE VIEW

CREATE VIEW define una nueva vista persistente. Aurora DSQL no admite vistas temporales; solo admite vistas permanentes.

Sintaxis admitida

CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

Descripción

CREATE VIEW define una vista de una consulta. La vista no está materializada físicamente. En su lugar, la consulta se ejecuta cada vez que se hace referencia a la vista en una consulta.

CREATE or REPLACE VIEW es similar, pero, si ya existe una vista con el mismo nombre, se reemplaza. La nueva consulta debe generar las mismas columnas que generó la consulta de la vista existente (es decir, los mismos nombres de columna en el mismo orden y con los mismos tipos de datos), pero puede agregar columnas adicionales al final de la lista. Los cálculos que dan lugar a las columnas de salida pueden ser diferentes.

Si se indica un nombre de esquema, como CREATE VIEW myschema.myview ...), la vista se crea en el esquema especificado. En caso contrario, se crea en el esquema actual.

El nombre de la vista debe ser distinto del nombre de cualquier otra relación (tabla, índice o vista) en el mismo esquema.

Parameters

CREATE VIEW admite varios parámetros para controlar el comportamiento de las vistas actualizables automáticamente.

RECURSIVE

Crea una vista recursiva. La sintaxis CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...; es equivalente a CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;.

Para una vista recursiva, debe especificarse una lista de nombres de columna de vista.

name

El nombre de la vista que se va a crear, que puede estar opcionalmente cualificado por el esquema. Para una vista recursiva, debe especificarse una lista de nombres de columna.

column_name

Una lista opcional de nombres que se utilizarán para las columnas de la vista. Si no se indican, los nombres de columna se deducen de la consulta.

WITH ( view_option_name [= view_option_value] [, ... ] )

Esta cláusula especifica parámetros opcionales para una vista; se admiten los siguientes parámetros.

  • check_option (enum): este parámetro puede ser local o cascaded, y equivale a especificar WITH [ CASCADED | LOCAL ] CHECK OPTION.

  • security_barrier (boolean): se debe utilizar si se pretende que la vista proporcione seguridad en la fila. Aurora DSQL no admite actualmente la seguridad a nivel de fila, pero esta opción aún forzará a que las condiciones WHERE de la vista (y cualquier condición que utilice operadores marcados como LEAKPROOF) se evalúen primero.

  • security_invoker (boolean): esta opción hace que las relaciones base subyacentes se comprueben con los privilegios del usuario de la vista en lugar del propietario de la vista. Consulte las notas siguientes para obtener todos los detalles.

Todas las opciones anteriores pueden modificarse en las vistas existentes mediante ALTER VIEW.

query

Un comando SELECT o VALUES que proporcionará las columnas y filas de la vista.

WITH [ CASCADED | LOCAL ] CHECK OPTION

Esta opción controla el comportamiento de las vistas actualizables automáticamente. Cuando se especifica esta opción, los comandos INSERT y UPDATE de la vista se comprobarán para asegurarse de que las nuevas filas satisfacen la condición que define la vista (es decir, se comprueba que las nuevas filas son visibles a través de la vista). Si no lo son, se rechazará la actualización. Si no se especifica CHECK OPTION, se permite que los comandos INSERT y UPDATE en la vista creen filas que no son visibles a través de la vista.

LOCAL: las nuevas filas solo se comprueban con las condiciones definidas directamente en la propia vista. Las condiciones definidas en las vistas base subyacentes no se comprueban (a menos que también especifiquen CHECK OPTION).

CASCADED: las filas nuevas se comprueban con las condiciones de la vista y de todas las vistas base subyacentes. Si se especifica CHECK OPTION y no se especifican LOCAL ni CASCADED, entonces se supone CASCADED.

nota

CHECK OPTION no se puede usar con vistas RECURSIVE. CHECK OPTION solo se admite en las vistas que se actualizan automáticamente.

Notas

Utilice la instrucción DROP VIEW para descartar vistas.

Los nombres y tipos de datos de las columnas de la vista deben considerarse cuidadosamente. Por ejemplo, no se recomienda CREATE VIEW vista AS SELECT 'Hello World'; ya que el nombre de la columna está predeterminado como ?column?;. Además, el tipo de datos de la columna es text de forma predeterminada, que puede no ser lo que se deseaba.

Un enfoque mejor es especificar explícitamente el nombre de la columna y el tipo de datos, como por ejemplo: CREATE VIEW vista AS SELECT text 'Hello World' AS hello;.

De forma predeterminada, el acceso a las relaciones base subyacentes a las que se hace referencia en la vista viene determinado por los permisos del propietario de la vista. En algunos casos, esto puede utilizarse para proporcionar un acceso seguro pero restringido a las tablas subyacentes. No obstante, no todas las vistas están protegidas contra la manipulación.

  • Si la vista tiene la propiedad security_invoker establecida en true, el acceso a las relaciones base subyacentes viene determinado por los permisos del usuario que ejecuta la consulta, en lugar de por el propietario de la vista. Así, el usuario de una vista de invocación de seguridad debe tener los permisos pertinentes en la vista y las relaciones base subyacentes.

  • Si alguna de las relaciones base subyacentes es una vista de invocación de seguridad, se tratará como si se hubiera accedido a ella directamente desde la consulta original. Así, una vista de invocación de seguridad siempre comprobará las relaciones base subyacentes mediante los permisos del usuario actual, incluso si se accede a ella desde una vista sin la propiedad security_invoker.

  • Las funciones a las que se llama en la vista se tratan igual que si se hubieran llamado directamente desde la consulta que utiliza la vista. Por lo tanto, el usuario de una vista debe tener permisos para llamar a todas las funciones que utiliza la vista. Las funciones en la vista se ejecutan con los privilegios del usuario que ejecuta la consulta o del propietario de la función, dependiendo de si las funciones están definidas como SECURITY INVOKER o SECURITY DEFINER.

  • El usuario que crea o reemplaza una vista debe tener privilegios USAGE en cualquier esquema al que se haga referencia en la consulta de la vista, para poder buscar los objetos a los que se hace referencia en esos esquemas.

  • Cuando se utiliza CREATE OR REPLACE VIEW en una vista existente, solo se modifica la regla SELECT de definición de la vista, además de cualquier parámetro WITH ( ... ) y CHECK OPTION. Las demás propiedades de la vista, incluidas la propiedad, los permisos y las reglas no SELECT, permanecen sin alterarse. Debe tener la propiedad de la vista para reemplazarla (esto incluye ser miembro del rol de propietario).

Vistas actualizables

Las vistas simples son actualizables automáticamente: el sistema permitirá que se utilicen las instrucciones INSERT, UPDATE y DELETE en la vista del mismo modo que en una tabla normal. Una vista es actualizable automáticamente si cumple todas las condiciones siguientes:

  • La vista debe tener exactamente una entrada en la lista FROM, que debe ser una tabla u otra vista actualizable.

  • La definición de la vista no debe contener las cláusulas WITH, DISTINCT, GROUP BY, HAVING, LIMIT o OFFSET en el nivel superior.

  • La definición de la vista no debe contener operaciones de conjunto (UNION, INTERSECT o EXCEPT) en el nivel superior.

  • La lista de selección de la vista no debe contener agregados, funciones de ventana ni funciones que devuelvan conjuntos.

Una vista actualizable automáticamente puede contener una mezcla de columnas actualizables y no actualizables. Una columna es actualizable si es una simple referencia a una columna actualizable de la relación base subyacente. En caso contrario, la columna es de solo lectura y se produce un error si una instrucción INSERT o UPDATE intenta asignarle un valor.

Una vista más compleja que no satisfaga todas estas condiciones es de solo lectura de forma predeterminada: el sistema no permite una inserción, actualización o eliminación en la vista.

nota

El usuario que realiza la inserción, actualización o eliminación en la vista debe tener el correspondiente privilegio de inserción, actualización o eliminación en la vista. De forma predeterminada, el propietario de la vista debe tener los privilegios correspondientes en las relaciones base subyacentes, mientras que el usuario que realiza la actualización no necesita ningún permiso en las relaciones base subyacentes. No obstante, si la vista tiene security_invoker establecido en true, el usuario que realiza la actualización, en lugar del propietario de la vista, debe tener los privilegios pertinentes en las relaciones base subyacentes.

Ejemplos

Crear una vista compuesta por todas las películas de comedia.

CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';

Cree una vista con LOCAL CHECK OPTION.

CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;

Cree una vista recursiva.

CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;

Compatibilidad

CREATE OR REPLACE VIEW es una extensión del lenguaje PostgreSQL. La cláusula WITH ( ... ) también es una extensión, al igual que las vistas de barrera de seguridad y las vistas de invocación de seguridad. Aurora DSQL admite estas extensiones de lenguaje.