

SELECT INTO — définit une nouvelle table à partir des résultats d'une requête
[ WITH [ RECURSIVE ]requête_with[, ...] ] SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] [ { * |expression[ [ AS ]nom_sortie] } [, ...] ] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]nouvelle_table[ FROMélément_from[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition] [ WINDOWnom_windowAS (définition_window) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select] [ ORDER BYexpression[ ASC | DESC | USINGopérateur] [, ...] ] [ LIMIT {nombre| ALL } ] [ OFFSETdébut[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [nombre] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFnomtable[, ...] ] [ NOWAIT ] [...] ]
   SELECT INTO crée une nouvelle table en la remplissant
   avec des données récupérées par une requête. Les données ne sont pas
   renvoyées au client comme le fait habituellement l'instruction
   SELECT. Les nouvelles colonnes de la table ont les noms
   et les types de données associés avec les colonnes en sortie du
   SELECT.
  
TEMPORARY ou TEMPSi spécifié, la table est créée comme une table temporaire. Référez-vous à CREATE TABLE pour plus de détails.
UNLOGGEDSi spécifié, la table est créée comme une table non tracée dans les journaux de transactions. Voir CREATE TABLE pour plus de détails.
new_tableLe nom de la table à créer (pouvant être qualifié par le nom du schéma).
Tous les autres paramètres sont décrits en détail dans SELECT.
   CREATE TABLE AS
   est fonctionnellement équivalent à
   SELECT INTO. CREATE TABLE AS est la
   syntaxe recommandée car cette forme de SELECT INTO n'est
   pas disponible dans ECPG ou
   PL/pgSQL. En effet, ils interprètent la clause
   INTO différemment. De plus, CREATE TABLE
    AS offre un ensemble de fonctionnalités plus important que celui
   de SELECT INTO.
  
   En contraste à CREATE TABLE AS, SELECT
    INTO ne permet pas de spécifier les propriétés telles que la
   méthode d'accès à la table avec USING 
   ou le tablespace de la table avec methodTABLESPACE . Utilisez
   nom_tablespaceCREATE TABLE AS si nécessaire. De ce fait, la méthode d'accès
   par défaut de la table est choisie pour la nouvelle table. Voir default_table_access_method pour plus d'informations.
  
   Crée une nouvelle table films_recent ne contenant que
   les entrées récentes de la table films :
   
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
   Le standard SQL utilise SELECT INTO pour représenter la
   sélection de valeurs dans des variables scalaires d'un programme hôte
   plutôt que la création d'une nouvelle table. Ceci est en fait
   l'utilisation trouvée dans ECPG (voir Chapitre 34) et dans PL/pgSQL (voir Chapitre 41). L'usage de PostgreSQL de
   SELECT INTO pour représenter une création de table est
   historique. Certaines autres implémentations SQL utilisent aussi
   SELECT INTO de cette façon (mais la plupart des
   implémentations SQL acceptent CREATE TABLE AS à la
   place). En dehors de ces considérations de compatibilité, il est
   préférable d'utiliser CREATE TABLE AS dans un nouveau
   programme.