Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
CREATE VIEW
CREATE VIEW définit une nouvelle vue persistante. Aurora DSQL ne prend pas en charge les vues temporaires ; seules les vues permanentes sont prises en charge.
Syntaxe prise en charge
CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Description
CREATE VIEW définit une vue d’une requête. La vue n’est pas matérialisée physiquement. Au lieu de cela, la requête est exécutée chaque fois que la vue est référencée dans une requête.
CREATE or REPLACE VIEW est similaire, mais si une vue du même nom existe déjà, elle est remplacée. La nouvelle requête doit générer les mêmes colonnes que celles générées par la requête de vue existante (c’est-à-dire les mêmes noms de colonnes dans le même ordre et avec les mêmes types de données), mais elle peut ajouter des colonnes supplémentaires à la fin de la liste. Les calculs à l’origine des colonnes de sortie peuvent être différents.
Si un nom de schéma est fourni (tel que CREATE VIEW myschema.myview ...), la vue est créée dans le schéma spécifié. Sinon, elle est créée dans le schéma en cours.
Le nom de la vue doit être distinct du nom de toute autre relation (table, index, vue) dans le même schéma.
Parameters
CREATE VIEW prend en charge divers paramètres de contrôle du comportement des vues pouvant être mises à jour automatiquement.
RECURSIVE-
Crée une vue récursive. La syntaxe :
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;est équivalente àCREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;.Une liste de noms de colonnes de vue doit être spécifiée pour une vue récursive.
name-
Le nom de la vue à créer, qui peut éventuellement être qualifié de schéma. Une liste de noms de colonnes doit être spécifiée pour une vue récursive.
column_name-
Liste facultative des noms à utiliser pour les colonnes de la vue. Si elle n’est pas fournie, les noms de colonnes sont déduits de la requête.
WITH ( view_option_name [= view_option_value] [, ... ] )-
Cette clause spécifie des paramètres facultatifs pour une vue ; les paramètres suivants sont pris en charge.
-
check_option (enum): ce paramètre peut êtrelocaloucascadedet équivaut à la spécificationWITH [ CASCADED | LOCAL ] CHECK OPTION. -
security_barrier (boolean): cela doit être utilisé si la vue est destinée à fournir une sécurité au niveau des lignes. Aurora DSQL ne prend actuellement pas en charge la sécurité au niveau des lignes, mais cette option obligera tout de même à évaluer d'WHEREabord les conditions de la vue (et toutes les conditions utilisant des opérateurs marqués commeLEAKPROOF). -
security_invoker (boolean): cette option permet de vérifier les relations de base sous-jacentes en fonction des privilèges de l’utilisateur de la vue plutôt que du propriétaire de la vue. Pour plus de détails, consultez les notes ci-dessous.
Toutes les options ci-dessus peuvent être modifiées sur les vues existantes à l’aide de
ALTER VIEW. -
query-
Une
VALUEScommandeSELECTou qui fournira les colonnes et les lignes de la vue. WITH [ CASCADED | LOCAL ] CHECK OPTION-
Cette option contrôle le comportement des vues actualisables automatiquement. Lorsque cette option est spécifiée, les commandes
INSERTetUPDATEde la vue sont vérifiées pour s’assurer que les nouvelles lignes répondent à la condition définissant la vue (c’est-à-dire que les nouvelles lignes sont vérifiées pour s’assurer qu’elles sont visibles dans la vue). Dans le cas contraire, la mise à jour sera rejetée. Si l’optionCHECK OPTIONn’est pas spécifiée, les commandesINSERTetUPDATEde la vue sont autorisées à créer des lignes qui ne sont pas visibles dans la vue.LOCAL: les nouvelles lignes ne sont vérifiées que par rapport aux conditions définies directement dans la vue elle-même. Les conditions définies sur les vues de base sous-jacentes ne sont pas vérifiées (sauf si elles spécifient égalementCHECK OPTION).CASCADED: les nouvelles lignes sont vérifiées en fonction des conditions de la vue et de toutes les vues de base sous-jacentes. Si l’optionCHECK OPTIONest spécifiée et que niLOCALniCASCADEDn’est spécifié, alorsCASCADEDest supposé.Note
L’option
CHECK OPTIONne peut pas être utilisée avec les vuesRECURSIVE. L’optionCHECK OPTIONest uniquement pris en charge que sur les vues qui peuvent être mises à jour automatiquement.
Remarques
Utilisez l’instruction DROP VIEW pour supprimer des vues.
Les noms et les types de données des colonnes de la vue doivent être soigneusement étudiés. Par exemple, CREATE VIEW vista AS SELECT « Hello World; » n’est pas recommandé, car le nom de colonne par défaut est ?column?;. De plus, le type de données de colonne par défaut est text, ce qui n’est peut-être pas ce que vous vouliez.
Une meilleure approche consiste à spécifier explicitement le nom de la colonne et le type de données, tels que : CREATE VIEW vista AS SELECT text 'Hello World' AS hello;.
Par défaut, l’accès aux relations de base sous-jacentes référencées dans la vue est déterminé par les autorisations du propriétaire de la vue. Dans certains cas, cela peut être utilisé pour fournir un accès sécurisé, mais restreint aux tables sous-jacentes. Cependant, toutes les vues ne sont pas protégées contre la falsification.
-
Si la propriété
security_invokerde la vue est définie sur true, l’accès aux relations de base sous-jacentes est déterminé par les autorisations de l’utilisateur qui exécute la requête plutôt que par celles de la vue. Ainsi, l’utilisateur d’une vue d’invocation de sécurité doit disposer des autorisations appropriées sur la vue et ses relations de base sous-jacentes. -
Si l’une des relations de base sous-jacentes est une vue d’invocation de sécurité, elle sera traitée comme si elle avait été accessible directement depuis la requête d’origine. Ainsi, une vue d’invocation de sécurité vérifiera toujours ses relations de base sous-jacentes à l’aide des autorisations de l’utilisateur actuel, même si elle est accessible depuis une vue dépourvue de la propriété
security_invoker. -
Les fonctions appelées dans la vue sont traitées de la même manière que si elles avaient été appelées directement depuis la requête utilisant la vue. Par conséquent, l’utilisateur d’une vue doit être autorisé à appeler toutes les fonctions utilisées par la vue. Les fonctions de la vue sont exécutées avec les privilèges de l’utilisateur exécutant la requête ou du propriétaire de la fonction, selon que les fonctions sont définies comme
SECURITY INVOKERouSECURITY DEFINER. -
L’utilisateur qui crée ou remplace une vue doit disposer de privilèges
USAGEsur tous les schémas auxquels il est fait référence dans la requête de la vue, afin de pouvoir rechercher les objets référencés dans ces schémas. -
Lorsque
CREATE OR REPLACE VIEWest utilisé sur une vue existante, seule la règleSELECTde la vue, ainsi que les paramètresWITH ( ... )et son optionCHECK OPTIONsont modifiés. Les autres propriétés de la vue, notamment la propriété, les autorisations et les règles autres que SELECT, restent inchangées. Vous devez être propriétaire de la vue pour la remplacer (cela inclut le fait d’être membre du rôle propriétaire).
Vues qui peuvent être mises à jour
Les vues simples peuvent être mises à jour automatiquement : le système autorisera l’utilisation des instructions INSERT, UPDATE et DELETE sur la vue de la même manière que sur une table normale. Une vue peut être automatiquement mise à jour si elle répond à toutes les conditions suivantes :
-
La vue doit comporter exactement une entrée dans sa liste
FROM, qui doit être une table ou une autre vue pouvant être mise à jour. -
La définition de la vue ne doit pas contenir de clauses
WITH,DISTINCT,GROUP BY,HAVING,LIMITniOFFSETau niveau supérieur. -
La définition de la vue ne doit pas contenir d’opération définies (
UNION,INTERSECTniEXCEPT) au niveau supérieur. -
La liste de sélection de la vue ne doit pas contenir d’agrégats, de fonctions de fenêtrage ni de fonctions à renvoi d’ensemble.
Une vue pouvant être automatiquement mise à jour peut contenir un mélange de colonnes pouvant et ne pouvant pas être mises à jour. Une colonne peut être mise à jour s’il s’agit d’une simple référence à une colonne pouvant être mise à jour de la relation de base sous-jacente. Dans le cas contraire, la colonne est en lecture seule et une erreur se produit si une instruction INSERT ou UPDATE tente de lui attribuer une valeur.
Une vue plus complexe qui ne répond pas à toutes ces conditions est en lecture seule par défaut : le système n’autorise pas l’insertion, la mise à jour ni la suppression de la vue.
Note
L’utilisateur qui effectue l’insertion, la mise à jour ou la suppression de la vue doit disposer du privilège d’insertion, de mise à jour ou de suppression de la vue correspondant. Par défaut, le propriétaire de la vue doit avoir les privilèges nécessaires sur les relations de base sous-jacentes, tandis que l’utilisateur qui effectue la mise à jour n’a besoin d’aucune autorisation sur les relations de base sous-jacentes. Toutefois, si security_invoker est défini sur true pour la vue, c’est l’utilisateur qui effectue la mise à jour, plutôt que le propriétaire de la vue, qui doit disposer des privilèges appropriés sur les relations de base sous-jacentes.
Exemples
Création d’une vue comprenant tous les films comiques.
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
Créer une vue avec LOCAL CHECK OPTION.
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
Créez une vue récursive.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
Compatibilité
CREATE OR REPLACE VIEW est une extension du langage PostgreSQL. La clause WITH ( ... ) est également une extension, tout comme les vues des barrières de sécurité et les vues d’invocation de sécurité. Aurora DSQL prend en charge ces extensions de langage.