CREATE VIEW (création de vues)

Une vue dans une base de données est une synthèse d'une requête d'interrogation de la base. On peut la voir comme une table virtuelle, définie par une requête (équivalent sous MapInfo des ‘tables requêtes').

Elles présentent différents avantages :

  • Eviter la ré­écriture des mêmes commandes SQL plusieurs fois dans les programmes

  • Faciliter le travail de requêtes pour des utilisateurs sur des modèles complexes. QGIS accède et visualise les vues

  • Réaliser une jointure, une projection (sélection de colonnes) ... systématique

  • Faire une mise en forme de données (convert, extract, fonctions de dates...)

Inconvénient :

  • Temps de chargement dans QGIS dans le cas de requêtes complexes ou de tables au volume important (voir cependant la création de vues matérialisées un peu plus loin qui permet de mémoriser le résultat et de le rafraîchir à la demande).

Le syntaxe générale est la suivante :

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW nom [ ( nom_colonne [, ...] ) ]

[ WITH ( nom_option_vue [= valeur_option_vue] [, ... ] ) ]

AS requête

[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

Si un nom de schéma est donné (par exemple CREATE VIEW monschema.mavue ...), alors la vue est créée dans ce schéma. Dans le cas contraire, elle est créée dans le schéma courant. Les vues temporaires existent dans un schéma spécial. Il n'est donc pas nécessaire de fournir de schéma pour les vues temporaires. Le nom de la vue doit être différent du nom de toute autre vue, table, séquence, index ou table distante du même schéma.

ComplémentModification des vues

Sous PostgreSQL (à partir de 9.4) les vues simples sont automatiquement modifiables : le système autorise l'utilisation des commandes INSERT, UPDATE et DELETE sur les vues comme sur les tables. Une vue est modifiable automatiquement si elle satisfait les conditions suivantes :

  • La vue doit avoir exactement une entrée (une table ou une autre vue modifiable) dans la liste FROM.

  • La définition de la vue ne doit pas contenir de clauses WITH, DISTINCT, GROUP BY, HAVING, LIMIT ou OFFSET au niveau le plus haut.

  • La définition de la vue ne doit pas contenir d'opérations sur des ensembles (UNION, INTERSECT ou EXCEPT) au niveau le plus haut.

  • La liste de sélection de la vue ne doit pas contenir d'agrégats, de fonctions de fenêtrage ou de fonctions renvoyant des ensembles de lignes.

Si la vue est modifiable automatiquement, le système convertira automatiquement toute commande INSERT, UPDATE ou DELETE sur la vue dans la commande correspondante sur la relation sous-jacente.

l'option CHECK OPTION contrôle le comportement des vues automatiquement modifiables. Quand cette option est spécifiée, les commandes INSERT et UPDATE sur la vue seront vérifiées pour s'assurer que les nouvelles lignes satisfont la condition définie dans la vue (autrement dit, les nouvelles lignes sont vérifiées pour s'assurer qu'elles sont visibles par la vue). Dans le cas contraire, la mise à jour est rejetée. Si l'option CHECK OPTION n'est pas indiquée, les commandes INSERT et UPDATE sur la vue sont autorisées à créer des lignes qui ne sont pas visibles avec la vue.

Nous verrons plus loin dans la formation comment réaliser des mises à jour sur des vues plus complexes à l'aide de triggers.

Vues matérialisées

Une vue peut-être matérialisée.

CREATE MATERIALIZED VIEW

La requête est exécutée et utilisée pour peupler la vue à l'exécution de la commande (sauf si WITH NO DATA est utilisé) et peut être rafraîchi plus tard en utilisant REFRESH MATERIALIZED VIEW.

CREATE MATERIALIZED VIEW est similaire à CREATE TABLE AS, sauf que PostGreSQL se rappelle aussi de la requête utilisée pour initialiser la vue pour qu'elle puisse être rafraîchie à la demande. Une vue matérialisée a plusieurs propriétés communes avec une table, mais il n'y a pas de support pour les vues matérialisées temporaires.