CREATE VIEW
Crea una vista en una base de datos. La vista no está materializada físicamente; la consulta que define la vista se ejecuta cada vez que se hace referencia a dicha vista en una consulta. Para crear una vista con una tabla externa, incluya la cláusula WITH NO SCHEMA BINDING.
Para crear una vista estándar, debe obtener acceso a las tablas o vistas subyacentes. Para consultar una vista estándar, debe seleccionar los premisos de la vista, pero no es necesario seleccionar permisos para las tablas subyacentes. Si crea una vista que haga referencia a una tabla o vista de otro esquema o si crea una vista que haga referencia a una vista materializada, es posible que necesite permisos de uso. Para consultar una vista de enlace tardío, debe seleccionar los permisos de la propia vista de enlace tardío. También debe asegurarse de que el propietario de la vista de enlace tardío tiene permisos de selección para los objetos de referencia (tablas, vistas o funciones definidas por el usuario). Para obtener más información acerca de las vistas de enlace tardío, consulte Notas de uso.
Permisos necesarios
Para utilizar CREATE VIEW, se requiere uno de los siguientes permisos.
Para crear una vista con CREATE [ OR REPLACE ] VIEW:
Superusuario
Usuarios con el permiso CREATE [ REPLACE ] VIEW
Para reemplazar una vista existente mediante CREATE OR REPLACE VIEW:
Superusuario
Usuarios con el permiso CREATE [ OR REPLACE ] VIEW
Propietario de la vista
Si un usuario desea acceder a una vista que incorpora una función definida por el usuario, debe contar con el permiso EXECUTE en esa función.
Sintaxis
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]
Parámetros
- OR REPLACE
-
Si ya existe una vista con el mismo nombre, se sustituye la vista. Solo puede reemplazar una vista con una nueva consulta que genere el conjunto idéntico de columnas, con los mismos nombres de columnas y los mismos tipos de datos. CREATE OR REPLACE VIEW bloquea la vista para lecturas y escrituras hasta que se completa la operación.
Cuando se reemplaza una vista, se conservan sus otras propiedades, como la propiedad y los privilegios concedidos.
- name
-
El nombre de la vista. Si se proporciona un nombre de esquema (como
myschema.myview
), la vista se crea con el esquema especificado. De lo contrario, la vista se crea en el esquema actual. El nombre de la vista debe ser distinto al de cualquier otra vista o tabla en el mismo esquema.Si especifica un nombre de vista que comienza con "#", la vista se crea como una vista temporal que solo es visible en la sesión actual.
Para obtener más información acerca de los nombres válidos, consulte Nombres e identificadores. No puede crear tablas o vistas en las bases de datos del sistema template0, template1, padb_harvest o sys:internal.
- column_name
-
Lista opcional de nombres que se utilizarán para las columnas en la vista. Si no se proporcionan nombres de columnas, se derivan de la consulta. La cantidad máxima de columnas que se pueden definir en una única vista es 1 600.
- consulta
-
Una consulta (en la forma de una instrucción SELECT) que se evalúa en una tabla. Esta tabla define las columnas y filas de la vista.
- WITH NO SCHEMA BINDING
-
Cláusula que especifica que la vista no está vinculada a los objetos de base de datos subyacentes, como tablas y funciones definidas por el usuario. Por tanto, no existe ninguna dependencia entre la vista y los objetos a los que hace referencia. Puede crear una vista aunque no existan los objetos a los que se hace referencia. Como no hay dependencias, puede quitar o modificar un objeto al que se referencie sin que esto afecte a la vista. Amazon Redshift no verifica si existen dependencias hasta que se consulta la vista. Para ver los detalles de las vistas de enlace tardío, ejecute la función PG_GET_LATE_BINDING_VIEW_COLS.
Cuando incluya la cláusula WITH NO SCHEMA BINDING, las tablas y vistas a las que se hace referencia en la instrucción SELECT deben incluir el nombre de un esquema. El esquema debe existir cuando se crea la vista, aunque no exista la tabla a la que se hace referencia. Por ejemplo, la siguiente instrucción devuelve un error.
create view myevent as select eventname from event with no schema binding;
La siguiente instrucción se ejecuta correctamente.
create view myevent as select eventname from public.event with no schema binding;
nota
No se puede actualizar, insertar en o eliminar de una vista.
Notas de uso
Vistas de enlace en tiempo de ejecución
Una vista de enlace en tiempo de ejecución comprueba los objetos de base de datos subyacentes, como tablas y otras vistas, hasta que se consulta la vista. Por consiguiente, puede modificar o borrar los objetos subyacentes sin borrar o volver a crear la vista. Si borra objetos subyacentes, las consultas a la vista de enlace de tiempo de ejecución darán error. Si la consulta de la vista de enlace de tiempo de ejecución hace referencia a columnas del objeto subyacente que no están presentes, la consulta no se ejecutará correctamente.
Si borra y luego vuelve a crear una tabla o vista subyacente de la vista de enlace de tiempo de ejecución, el nuevo objeto se creará con los permisos de acceso predeterminados. Es posible que deba conceder permisos para los objetos subyacentes a los usuarios que consultarán la vista.
Para crear una vista de enlace en tiempo de ejecución, incluya la cláusula WITH NO SCHEMA BINDING. El siguiente ejemplo crea un vista sin enlace con el esquema.
create view event_vw as select * from public.event with no schema binding;
select * from event_vw limit 1;
eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00
El siguiente ejemplo muestra que puede modificar o borrar una tabla subyacente sin volver a crear la vista.
alter table event rename column eventname to title;
select * from event_vw limit 1;
eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00
Solo puede referenciar las tablas externas de Amazon Redshift Spectrum en una vista de enlace de tiempo de ejecución. Una aplicación de las vistas de enlace de tiempo de ejecución es consultar las tablas de Amazon Redshift y de Redshift Spectrum. Por ejemplo, puede utilizar el comando UNLOAD para archivar datos más antiguos en Amazon S3. Luego, cree una tabla externa de Redshift Spectrum que referencie los datos de Amazon S3 y cree una vista que consulte ambas tablas. En el siguiente ejemplo, se utiliza una cláusula UNION ALL para combinar la tabla SALES
de Amazon Redshift y la tabla SPECTRUM.SALES
de Redshift Spectrum.
create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;
Para obtener más información acerca de la creación de tablas externas de Redshift Spectrum, incluida la tabla SPECTRUM.SALES
, consulte Introducción a Amazon Redshift Spectrum.
Al crear una vista estándar a partir de una vista de enlace tardío, la definición estándar de la vista contiene la definición de la vista de enlace tardío en el momento en que se creó la vista estándar. No se realiza ningún seguimiento de la dependencia de la vista de enlace tardío, por lo que los cambios en la vista de enlace tardío no se registran en la vista estándar.
Para actualizar la vista estándar y hacer referencia a la definición más reciente de la vista de enlace tardío, ejecute CREATE OR REPLACE VIEW con la definición de vista inicial que ha utilizado para crear la vista estándar.
Consulte el siguiente ejemplo de creación de una vista estándar a partir de una vista de enlace tardío.
create view sales_vw_lbv as select * from public.sales with no schema binding; show view sales_vw_lbv; Show View DDL statement -------------------------------------------------------------------------------- create view sales_vw_lbv as select * from public.sales with no schema binding; (1 row) create view sales_vw as select * from sales_vw_lbv; show view sales_vw; Show View DDL statement --------------------------------------------------------------------------------------------------------------------- SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv; (1 row)
Tenga en cuenta que la vista de enlace tardío, tal como se muestra en la instrucción DDL de la vista estándar, se define al crear la vista estándar y no se actualizará con los cambios que realice posteriormente en la vista de enlace tardío.
Ejemplos
Los comandos de ejemplo utilizan un conjunto de objetos y datos de muestra denominado base de datos TICKIT. Para obtener más información, consulte Base de datos de muestra.
El siguiente comando crea una vista denominada myevent a partir de una tabla llamada EVENT.
create view myevent as select eventname from event where eventname = 'LeAnn Rimes';
El siguiente comando crea una vista denominada myuser a partir de una tabla llamada USERS.
create view myuser as select lastname from users;
El siguiente comando crea o sustituye una vista denominada myuser a partir de una tabla llamada USERS.
create or replace view myuser as select lastname from users;
El siguiente ejemplo crea un vista sin enlace con el esquema.
create view myevent as select eventname from public.event with no schema binding;