CREATE VIEW - Amazon Aurora DSQL

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 être local ou cascaded et équivaut à la spécification WITH [ 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 VALUES commande SELECT ou 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 INSERT et UPDATE de 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’option CHECK OPTION n’est pas spécifiée, les commandes INSERT et UPDATE de 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 également CHECK 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’option CHECK OPTION est spécifiée et que ni LOCAL ni CASCADED n’est spécifié, alors CASCADED est supposé.

Note

L’option CHECK OPTION ne peut pas être utilisée avec les vues RECURSIVE. L’option CHECK OPTION est 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_invoker de 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 INVOKER ou SECURITY DEFINER.

  • L’utilisateur qui crée ou remplace une vue doit disposer de privilèges USAGE sur 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 VIEW est utilisé sur une vue existante, seule la règle SELECT de la vue, ainsi que les paramètres WITH ( ... ) et son option CHECK OPTION sont 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, LIMIT ni OFFSET au niveau supérieur.

  • La définition de la vue ne doit pas contenir d’opération définies (UNION, INTERSECT ni EXCEPT) 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.