PostgreSQLLa base de données la plus sophistiquée au monde.

CREATE TABLE AS

CREATE TABLE AS — Définir une nouvelle table à partir des résultats d'une requête

Synopsis

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

Description

CREATE TABLE AS crée une table et y insère les données récupérées par une commande SELECT ou une commande EXECUTE qui lance une commande SELECT préparée. Les colonnes de la table ont les noms et les types de données associés aux colonnes en sortie du SELECT (les noms des colonnes peuvent toutefois être surchargés).

CREATE TABLE AS semble possèder des similitudes avec la création d'une vue mais est, en fait, assez différente : elle crée une nouvelle table et n'évalue la requête qu'une seule fois, pour le chargement initial de la nouvelle table. Les modifications ultérieures de la table source ne sont pas prises en compte. Au contraire, une vue réévalue l'instruction SELECT de définition à chaque appel.

Paramètres

GLOBAL ou LOCAL

Ignoré. Conservé pour la compatibilité (cf. CREATE TABLE).

TEMPORARY ou TEMP

Si spécifié, la table est temporaire (cf. CREATE TABLE).

nom_table

Le nom de la table à créer (éventuellement qualifié du nom du schéma).

nom_colonne

Le nom d'une colonne dans la nouvelle table. Si les noms de colonnes ne sont pas précisés, ils sont issus des noms des colonnes en sortie de la requête. Les noms des colonnes ne peuvent pas être précisés lorsque la table est créée à partir d'une commande EXECUTE.

WITH OIDS, WITHOUT OIDS

Clause optionnelle qui précise si la table est créée avec les OIDs. La valeur du paramètre de configuration default_with_oids est utilisée en l'absence de précision.

requête

Une instruction (c'est-à-dire une commande SELECT ou une commande EXECUTE qui exécute une requête SELECT préparée). SELECT et EXECUTE décrivent les syntaxes respectivement autorisées.

Notes

Cette commande est fonctionnellement équivalente à SELECT INTO. Elle lui est cependant préférée car elle présente moins de risques de confusion avec les autres utilisations de la syntaxe SELECT INTO. De plus, CREATE TABLE AS offre plus de fonctionnalités que SELECT INTO.

Avant PostgreSQL™ 8.0, CREATE TABLE AS incluait toujours les OIDs dans la table créée. À partir de PostgresSQL™ 8.0, la commande CREATE TABLE AS autorise l'utilisateur à spécifier explicitement la présence des OID. En l'absence de précision, la variable de configuration default_with_oids est utilisée. À partir de PostgreSQL™ 8.1, la valeur par défaut de cette variable est «  faux  » ; le comportement par défaut n'est donc pas identique à celui des versions précédant la 8.0. Il est préférable que les applications qui nécessitent des OID dans la table créée par CREATE TABLE AS indiquent explicitement WITH OIDS pour s'assurer du comportement souhaité.

Exemples

Créer une table films_recent contenant les entrées récentes de la table films :

CREATE TABLE films_recent AS
  SELECT * FROM films WHERE date_prod >= '2006-01-01';

Compatibilité

CREATE TABLE AS est conforme au standard SQL, avec les exceptions suivantes :

  • Le standard requiert des parenthèses autour de la clause de la sous-requête ; elles sont optionnelles dans PostgreSQL™.

  • Le standard définit une clause ON COMMIT ; elle n'est pas encore implantée dans PostgreSQL™.

  • Le standard définit une clause WITH [ NO ] DATA ; elle n'est pas encore implantée dans PostgreSQL™. Le comportement de PostgreSQL™ est équivalent au cas WITH DATA du standard.

  • WITH/WITHOUT OIDS est une extension de PostgreSQL™.

  • PostgreSQL™ gère les tables temporaires assez différemment du standard. Voir CREATE TABLE pour plus de renseignements.