J'essaie de mettre à jour les faits utilisateur à l'intérieur d'une colonne dans un db Postrgres sous la forme indiquée ici.Mise à jour de la colonne jsonb
jsonb actuellement dans la colonne de données et en attente d'être mis à jour:
data = { "type1" : ["value1", "value2"], "type2" : ["value3"], "type3" : ["value4"] }
jsonb qui est envoyé à db:
new_jsonb = { "type1" : ["value7", "value8"], "type3" : ["value6"]}
comment le jsonb doit prendre soin à jour:
updated_jsonb = { "type1: ["value7", "value8"], "type2": ["value3"], "type3": ["value6"] }
Les règles de base lorsque l'on compare la valeur à l'origine dans l'ensemble de données, avec celui que nous voulons mettre à jour avec sont:
si le
new_jsonb
qui est en cours laissé passer contient des clés qui ne sont pas dans ledata
courant jsonb, alors ces clés sont ajoutées avec leurs valeurs. Si lenew_jsonb
en cours de transmission contient des clés qui se trouvent dans ledata
jsonb actuel, ces clés remplacent simplement les anciennes clés.
This poste a fait un travail utile décrivant l'utilisation générale de la fonction jsonb_set, mais je vais avoir du mal à passer à travers et faire la comparaison dans les tableaux. Spécifier spécifiquement le paramètre path
.
Donc, fondamentalement, où je suis coincé, je ne sais pas quel chemin spécifier pour que cela se produise. Ce que j'ai est . Le new_jsonb
qui est passé, ne passera pas toujours les paires clé-valeur dans le même ordre.
[PostgreSQL anti-modèles: inutiles json/colonnes hstore dynamiques] (https://blog.2ndquadrant.com/postgresql-anti-patterns -unnecessary-jsonhstore-dynamic-columns /) – Abelisto