私はここで指定されたフォームでPostrgresのカラムの中のユーザファクトを更新しようとしています。更新jsonbカラム
jsonb現在、データの列に、更新されるのを待っている:デシベルまで送られる
data = { "type1" : ["value1", "value2"], "type2" : ["value3"], "type3" : ["value4"] }
はjsonb:それは更新後jsonbがどのように見えるべきか
new_jsonb = { "type1" : ["value7", "value8"], "type3" : ["value6"]}
:
updated_jsonb = { "type1: ["value7", "value8"], "type2": ["value3"], "type3": ["value6"] }
基本的なルールを我々がそれを更新したいものと、データセット内の元々値を比較します:
まで渡されています
new_jsonb
は現在data
にないキーが含まれている場合jsonbの場合、それらのキーに値が追加されます。この場合、
new_jsonb
には現在のdata
jsonbに含まれるキーが含まれていますが、これらのキーはすべて古いキーを置き換えます。
Thisポストはjsonb_set機能のための一般的な使用を概説役に立つ仕事をしてくれたが、私はトラブルを通過すると、配列内の比較を行うことを抱えています。具体的にはpath
パラメータを指定します。
基本的に私が立ち往生しているところは、これが起こるためにどのようなパスを指定するのか分からないということです。私が持っているものはUPDATE table_name SET data = jsonb_set(data {don't know what path should be}, new) WHERE customer_id = $customerId
です。渡されたnew_jsonb
は、必ずしも同じ順序でキーと値のペアを通過するとは限りません。
[PostgreSQLのアンチパターン:不要JSON/hstoreの動的な列(https://blog.2ndquadrant.com/postgresql-anti-patterns -unnecessary-jsonhstore-dynamic-columns /) – Abelisto