CREATE TABLE AS

Nom

CREATE TABLE AS -- définit une nouvelle table à partir des résultats d'une requête

Synopsis

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE
nom_table [
(nom_colonne [, ...] ) ]
    AS requête [ [ WITH | WITHOUT ] OIDS ]

Description

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.

Paramètres

GLOBAL or LOCAL

Ignoré. Indiqué pour la compatibilité. Référez-vous à CREATE TABLE pour des détails.

TEMPORARY ou TEMP

Si spécifié, la table est créée comme une table temporaire. Référez-vous à CREATE TABLE pour plus de détails.

nom_table

Le nom de la table à créer (pouvant être qualifié avec le nom du schéma).

nom_colonne

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.

WITH OIDS
WITHOUT OIDS

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.

requête

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.

Notes

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.

Exemples

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';

Compatibilité

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 :

Voir aussi

CREATE TABLE, EXECUTE, SELECT, SELECT INTO