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_en_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.
Pour ajouter des OID à une table créée avec la commande SELECT INTO,
activez le paramètre de configuration default_with_oids.
Autrement, CREATE TABLE AS peut aussi être utilisé avec
la clause WITH OIDS.
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 35) et
dans PL/pgSQL (voir Chapitre 42).
L'usage de PostgreSQL de SELECT
INTO pour représenter une création de table est historique. Il est
préférable d'utiliser CREATE TABLE AS dans un
nouveau programme.