web-dev-qa-db-fra.com

Comment ajouter un nouvel élément dans la colonne de type tableau dans PostgreSQL

J'utilise PostgreSQL pour mon application,

La tâche sera comme ça

Il y a des utilisateurs qui utilisent mon application, et je dois maintenir une notification pour chacun d'eux en fonction de leur activité, donc je reçois beaucoup de notifications pour chaque utilisateur.

donc en général, nous mettons simplement toutes les notifications dans une table séparée et nous mappons avec l'ID utilisateur, donc nous pouvons simplement les récupérer, mais maintenant je pense utiliser soit le type de données json/array, donc je peux simplement mettre l'ensemble de notification en tant que array/json dans la cellule de chaque ligne utilisateur.

Lequel est le meilleur, en stockant json ou un tableau? (Im en utilisant PHP côté serveur)

et si nous en choisissons un parmi les deux, disons que nous avons environ 10 notifications, et j'ai eu la 11e, comment ajouter le nouvel élément dans l'objet array/json en une seule exécution (peut être une instruction UPDATE)? Je ne veux pas aller de manière basique comme sélectionner la ligne, obtenir le tableau existant/json ajouter le nouvel élément à la fin (processus avec PHP) et le METTRE À JOUR en arrière - ici, il faut deux exécutions où un autre changement peut se produire et qui amène des pertes de données

existe-t-il donc un moyen de faire une requête UPDATE qui ajoute simplement un nouvel élément ou modifie l'élément/nœud existant dans les types obejct array/json dans PostgreSQL?

17
CodeRows

Pour ajouter un élément à un tableau dans PostgreSQL, vous pouvez utiliser || opérateur ou fonction array_append.

Avec || opérateur

UPDATE table SET array_field = array_field || 'new item' WHERE ...

Avec la fonction array_append

UPDATE table SET array_field = array_append(array_field,'new item') WHERE ...

Vous pouvez également visiter cette page pour les tableaux, http://www.postgresql.org/docs/current/interactive/functions-array.html

Je ne sais pas comment le faire avec le type de données json.

38
samed.yildirim