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

INSERT

INSERT — Insérer de nouvelles lignes dans une table

Synopsis

INSERT INTO table [ ( colonne [, ...] ) ]
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | requête }

Description

INSERT insère de nouvelles lignes dans une table. Il est possible d'insérer une ligne en précisant les valeurs des colonnes ou plusieurs lignes issues d'une requête.

L'ordre des noms des colonnes n'a pas d'importance. Si aucune liste de noms de colonnes n'est donnée, toutes les colonnes de la table sont utilisée dans l'ordre de leur déclaration (les N premiers noms de colonnes si seules N valeurs de colonnes sont fournies dans la clause VALUES ou dans la requête). Les valeurs fournies par la clause VALUES ou par la requête sont associées à la liste explicite ou implicite des colonnes de gauche à droite.

Chaque colonne absente de la liste, implicite ou explicite, des colonnes se voit attribuer sa valeur par défaut, s'il y en a une, ou NULL dans le cas contraire.

Un transtypage automatique est entrepris lorsque l'expression d'une colonne ne correspond pas au type de donnée déclaré.

Le droit INSERT sur une table est requis pour pouvoir y insérer des lignes. Si la clause requête est utilisée pour insérer des lignes, le droit SELECT sur toute table utilisée dans la requête est également requis.

Paramètres

table

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

colonne

Le nom d'une colonne de table. Le nom de la colonne peut être qualifié avec un nom de sous-champ ou un indice de tableau, si nécessaire. (N'insérer que certains champs d'une colonne composite laisse les autres champs à NULL.)

DEFAULT VALUES

Toutes les colonnes se voient attribuer leur valeur par défaut.

expression

Une expression ou une valeur à affecter à la colonne correspondante.

DEFAULT

La colonne correspondante se voit attribuer sa valeur par défaut.

requête

Une requête (instruction SELECT) dont le résultat fournit les lignes à insérer. La syntaxe complète de la commande est décrite dans la documentation de l'instruction SELECT.

Sorties

En cas de succès, la commande INSERT renvoie un code de la forme

INSERT oid nombre

nombre correspond au nombre de lignes insérées. Si nombre vaut exactement un et que la table cible contient des OID, alors oid est l'OID affecté à la ligne insérée. Sinon, oid vaut zéro.

Exemples

Insérer une ligne dans la table films :

INSERT INTO films 
        VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comédie', '82 minutes');

Dans l'exemple suivant, la colonne longueur est omise et prend donc sa valeur par défaut :

INSERT INTO films (code, titre, did, date_prod, genre)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drame');

L'exemple suivant utilise la clause DEFAULT pour les colonnes date plutôt qu'une valeur précise :

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, DEFAULT, 'Comédie', '82 minutes');
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drame');

Insérer une ligne constituée uniquement de valeurs par défaut :

INSERT INTO films DEFAULT VALUES;

Insérer dans la table films des lignes extraites de la table tmp_films (la disposition des colonnes est identique dans les deux tables) :

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';

Insérer dans des colonnes de type tableau :

-- Create an empty 3x3 gameboard for noughts-and-crosses
-- (these commands create the same board)
INSERT INTO tictactoe (game, board[1:3][1:3])
    VALUES (1,'{{"","",""},{"","",""},{"","",""}}');
INSERT INTO tictactoe (game, board)
    VALUES (2,'{{,,},{,,},{,,}}');

Compatibilité

INSERT est conforme au standard SQL. Le standard n'autorise toutefois pas l'omission de la liste des noms de colonnes alors qu'une valeur n'est pas affectée à chaque colonne, que ce soit à l'aide de la clause VALUES ou à partir de la requête.

Les limitations possibles de la clause requête sont documentées sous SELECT.