Documentation PostgreSQL 8.3.23 > Référence > Commandes SQL > CREATE VIEW | |
CREATE USER | DEALLOCATE |
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW nom [ ( nom_colonne [, ...] ) ] AS requête
CREATE VIEW définit une vue d'après une requête. La vue n'est pas matérialisée physiquement. Au lieu de cela, la requête est lancée chaque fois qu'une vue est utilisée dans une requête.
CREATE OR REPLACE VIEW a la même finalité, mais si une vue du même nom existe déjà, elle est remplacée. Une vue ne peut être remplacée que par une requête engendrant le même ensemble de colonnes (c'est-à-dire avec les mêmes noms de colonnes et les même types de données).
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 ou index du même schéma.
La vue est temporaire. Les vues temporaires sont automatiquement supprimées en fin de session. Les relations permanentes qui portent le même nom ne sont plus visibles pour la session tant que la vue temporaire existe, sauf s'il y est fait référence avec le nom du schéma.
Si l'une des tables référencées par la vue est temporaire, la vue est alors elle-aussi temporaire (que TEMPORARY soit spécifié ou non).
Le nom de la vue à créer (éventuellement qualifié du nom du schéma).
Une liste optionnelle de noms à utiliser pour les colonnes de la vue. Si elle n'est pas donnée, le nom des colonnes est déduit de la requête.
Une commande SELECT ou VALUES qui fournira les colonnes et lignes de la vue.
Actuellement, les vues sont en lecture seule : le système n'autorise pas une insertion, une mise à jour ou une suppression sur une vue. Les effets d'une vue actualisable peuvent être reproduits par la création de règles de réécriture des insertions, suppressions, mises à jour, etc. sur la vue en actions appropriées sur les autres tables. CREATE RULE présente des informations utiles à ce propos.
L'instruction DROP VIEW est utilisée pour supprimer les vues.
Il est important de s'assurer que le nom et le type des colonnes de la vue correspondent à ce qui est souhaité. Ainsi :
CREATE VIEW vista AS SELECT 'Hello World';
présente deux défauts majeurs : le nom de la colonne prend la valeur implicite ?column? et son type de données le type implicite unknown. Pour obtenir une chaîne de caractères dans le résultat de la vue, on peut écrire :
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
L'accès aux tables référencées dans la vue est déterminé par les droits du propriétaire de la vue. Dans certains cas, cela peut être utilisé pour fournir un accès sécurisé. Cependant, toutes les vues ne sont pas sécurisables ; voir Section 36.4, « Règles et droits » pour des détails. Les fonctions appelées dans la vue sont traitées de la même façon que si elles avaient été appelées directement dans la requête utilisant la vue. Du coup, l'utilisateur d'une vue doit avoir les droits pour appeler toutes les fonctions utilisées par la vue.
Quand CREATE OR REPLACE VIEW est utilisé sur une vue existante, seule la règle SELECT définissant la vue est modifiée. Les autres propriétés, comme les droits, le propriétaire et les règles autres que le SELECT, ne sont pas modifiées. Vous devez être le propriétaire de la vue pour la remplacer (ceci incluant aussi les membres du rôle propriétaire).
Créer une vue composée des comédies :
CREATE VIEW comedies AS SELECT * FROM films WHERE genre = 'Comédie';
Le standard SQL spécifie quelques possibilités supplémentaires pour l'instruction CREATE VIEW :
CREATE VIEW nom [ ( nom_colonne [, ...] ) ] AS requête [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Les clauses optionnelles de la commande SQL complète sont :
Cette option concerne les vues actualisables. Toutes les commandes INSERT et UPDATE appliquées à la vue sont contrôlées pour s'assurer que les données satisfont les conditions de définition de la vue (les nouvelles données sont visibles au travers de la vue). Si ce n'est pas le cas, la mise à jour est rejetée.
Contrôle d'intégrité de la vue.
Contrôle d'intégrité de la vue et de toutes les vues dépendantes. CASCADED est implicite si ni CASCADED ni LOCAL ne sont précisés.
CREATE OR REPLACE VIEW est une extension PostgreSQL™, tout comme le concept de vue temporaire.