Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Avance rapide | Suivant |
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE nom_table [ (nom_colonne [, ...] ) ] AS requête [ [ WITH | WITHOUT ] OIDS ]
CREATE TABLE AS crée une table et la remplit avec des données récupérées par une commande SELECT ou un EXECUTE qui lance une commande préparée SELECT. Les colonnes de table ont les noms et les types de données associés avec les colonnes en sortie du SELECT (sauf que vous pouvez surcharger les noms de colonne en donnant une liste explicite des nouveaux noms de colonnes).
CREATE TABLE AS a une certaine ressemblance pour créer une vue mais elle est réellement assez différente : elle crée une nouvelle table et évalue la requête juste une fois pour remplir la nouvelle table initialement. La nouvelle table ne tracera pas les changements suivants pour les tables source de la requête. À l'opposé, une vue ré-évalue son instruction SELECT à chaque fois qu'elle est appelée.
Ignoré. Indiqué pour la compatibilité. Référez-vous à CREATE TABLE pour des détails.
Si spécifié, la table est créée comme une table temporaire. Référez-vous à CREATE TABLE pour plus de détails.
Le nom de la table à créer (pouvant être qualifié avec le nom du schéma).
Le nom d'une colonne dans une nouvelle table. Si les noms de colonnes ne sont pas fournis, ils sont pris des noms de colonnes en sortie de la requête. Si la table est créée à partir d'une commande EXECUTE, une liste de noms de colonnes peut ne pas être spécifiée.
Cette clause optionnelle spécifie si la table créée par CREATE TABLE AS devrait inclure OIDs. Si aucune forme de cette clause n'est spécifiée, la valeur du paramètre de configuration default_with_oids est utilisée.
Une instruction de requête (c'est-à-dire une commande SELECT ou une commande EXECUTE qui exécute une commande SELECT préparée). Référez-vous à SELECT ou EXECUTE, respectivement pour une description de la syntaxe autorisée.
Cette commande est équivalente fonctionnellement à SELECT INTO mais elle est préférée car il y a moins de risque de confusion avec les autres utilisations de la syntaxe SELECT ... INTO. De plus, CREATE TABLE AS offre un ensemble de fonctionnalités plus important que celles proposées par SELECT INTO.
Avant PostgreSQL 8.0, CREATE TABLE AS incluait toujours les OIDs dans la table qu'elle créait. À partir de PostgresSQL 8.0, la commande CREATE TABLE AS autorise l'utilisateur à spécifier explicitement les OID à inclure. Si la présence de OID n'est pas spécifiée explicitement, la variable de configuration default_with_oids est utilisée. Alors que la valeur par défaut de cette variable est true, la valeur par défaut pourrait être modifiée dans le futur. Du coup, les applications nécessitant des OID dans la table créée par CREATE TABLE AS devraient indiquer explicitement WITH OIDS pour s'assurer de la compatibilité avec les prochaines versions de PostgreSQL.
Créer une nouvelle table films_recent consistant des entrées récentes de la table films :
CREATE TABLE films_recent AS SELECT * FROM films WHERE date_prod >= '2002-01-01';
CREATE TABLE AS est spécifiée par le standard SQL:2003. Il existe quelques petites différences entre la définition de la commande dans SQL:2003 et son implémentation dans PostgreSQL :
Le standard requiert des parenthèses autour de la clause de la sous-requête ; dans PostgreSQL, ces parenthèses sont optionnsselles.
Le standard définit une clause ON COMMIT ; elle n'est pas encore implémentée par PostgreSQL.
Le standard définit une clause WITH DATA ; elle n'est pas encore implémentée par PostgreSQL.
Précédent | Sommaire | Suivant |
CREATE TABLE | Niveau supérieur | CREATE TABLESPACE |