CodeGym /Cours /SQL SELF /Modification des données dans les tableaux : array...

Modification des données dans les tableaux : array_append(), array_remove()

SQL SELF
Niveau 35 , Leçon 3
Disponible

Parfois, il ne suffit pas juste de lire les tableaux, il faut aussi les modifier : ajouter une nouvelle valeur, virer une ancienne, mettre à jour le contenu. Heureusement, dans PostgreSQL, il y a des fonctions spéciales qui te permettent de gérer facilement le contenu des tableaux sans tout réécrire à la main, genre array_append() et array_remove(). On va voir comment ça marche.

Ajouter des éléments dans un tableau avec array_append()

La fonction array_append() sert à ajouter un nouvel élément à la fin d’un tableau. Elle prend deux arguments :

  1. Le tableau d’origine que tu veux modifier.
  2. La valeur que tu veux ajouter au tableau.

Exemple 1 : Un tableau simple de nombres

Imaginons qu’on a une table projects avec une colonne team_members où on stocke des tableaux d’identifiants d’utilisateurs qui bossent sur le projet.

CREATE TABLE projects (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    team_members INT[]
);

-- Ajoutons quelques lignes
INSERT INTO projects (name, team_members)
VALUES
('Projet A', ARRAY[1, 2, 3]),
('Projet B', ARRAY[4, 5]);

Maintenant, on a le projet "Projet A", et on veut ajouter un nouveau membre avec l’identifiant 7 dans le tableau team_members. On utilise array_append() :

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Projet A';

-- Vérifions le résultat :
SELECT * FROM projects;

Résultat :

id name team_members
1 Projet A {1,2,3,7}
2 Projet B {4,5}

Comme tu vois, le membre avec l’ID 7 a bien été ajouté au tableau !

Exemple 2 : Ajouter des éléments texte

Tu peux aussi utiliser array_append() avec des tableaux d’autres types. Par exemple, on va ajouter une nouvelle catégorie dans un tableau de catégories de produits.

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    categories TEXT[]
);

-- Ajoutons un produit avec des catégories
INSERT INTO products (name, categories)
VALUES
('Smartphone', ARRAY['Électronique', 'Gadgets']),
('Ordinateur portable', ARRAY['Ordinateurs', 'Électronique']);

-- Ajoutons la nouvelle catégorie "Populaire" pour le "Smartphone"
UPDATE products
SET categories = array_append(categories, 'Populaire')
WHERE name = 'Smartphone';

-- Vérifions le résultat :
SELECT * FROM products;

Résultat :

id name categories
1 Smartphone {Électronique,Gadgets,Populaire}
2 Ordinateur portable {Ordinateurs,Électronique}

Supprimer des éléments d’un tableau avec array_remove()

Si array_append() c’est comme ajouter une nouvelle tâche à ta todo-list, array_remove() c’est l’outil pour barrer une tâche déjà faite. Cette fonction prend comme arguments :

  1. Le tableau d’origine.
  2. La valeur que tu veux supprimer.

Exemple 1 : Supprimer un élément d’un tableau de nombres

Revenons à la table projects. On a appris que le membre avec l’ID 7 ne bosse plus sur le projet "Projet A". On va le virer du tableau team_members :

UPDATE projects
SET team_members = array_remove(team_members, 7)
WHERE name = 'Projet A';

-- Vérifions le résultat :
SELECT * FROM projects;

Résultat :

id name team_members
1 Projet A {1,2,3}
2 Projet B {4,5}

La fonction array_remove() a bien supprimé le membre avec l’ID 7.

Exemple 2 : Supprimer un élément texte

Regardons maintenant la table products. Si la catégorie "Populaire" n’est plus d’actualité pour le smartphone, on peut la supprimer :

UPDATE products
SET categories = array_remove(categories, 'Populaire')
WHERE name = 'Smartphone';

-- Vérifions le résultat :
SELECT * FROM products;

Résultat :

id name categories
1 Smartphone {Électronique,Gadgets}
2 Ordinateur portable {Ordinateurs,Électronique}
Important :

si l’élément que tu essaies de supprimer n’est pas dans le tableau, array_remove() laisse le tableau inchangé. C’est super pratique, parce qu’il n’y a pas d’erreur qui se produit.

Combiner array_append() et array_remove()

Parfois, il faut d’abord vérifier qu’un élément n’est pas déjà dans le tableau avant de l’ajouter. Tu peux faire ça en combinant les fonctions :

Exemple : Ajouter des éléments uniques

On va s’assurer que le membre avec l’ID 7 est ajouté au tableau seulement s’il n’y est pas déjà. Pour ça, on utilise un test avec array_remove() :

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Projet A' AND NOT (team_members @> ARRAY[7]);

-- Vérifions le résultat :
SELECT * FROM projects;

Explication :

  • L’opérateur @> vérifie si le tableau contient l’élément 7.
  • Si team_members contient déjà 7, l’ajout ne se fait pas.

Erreurs courantes et conseils

1. Essayer d’ajouter NULL dans un tableau. Si tu tentes d’utiliser array_append() avec NULL (genre array_append(team_members, NULL)), ça va ajouter une valeur NULL dans le tableau. Il n’y aura pas d’erreur, mais c’est sûrement pas ce que tu voulais. Pour éviter ça, vérifie que la valeur n’est pas NULL avant de l’ajouter.

-- Exemple de vérification :
UPDATE projects
SET team_members = array_append(team_members, COALESCE(NULL, -1))
WHERE name = 'Projet A';

2. Types de données différents dans un tableau. Les tableaux dans PostgreSQL doivent contenir des valeurs du même type. Par exemple, tu ne peux pas ajouter une chaîne de caractères dans un tableau de nombres :

-- Ça va provoquer une erreur :
UPDATE projects
SET team_members = array_append(team_members, 'exemple');

Pour éviter ça, assure-toi que les types de données correspondent. Si t’es pas sûr, convertis la valeur au bon type avec :: :

-- Exemple de conversion de type :
UPDATE projects
SET team_members = array_append(team_members, '5'::INT);
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION