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_window
AS (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 TEMP
Si spécifié, la table est créée comme une table temporaire. Référez-vous à CREATE TABLE pour plus de détails.
UNLOGGED
Si 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_table
Le 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.