vous pouvez simplement utiliser json_populate_record
, par exemple:
t=# create table tj("MAC_ADDR" text, "PC_OPT" int, "SHOW_ADDR" int);
CREATE TABLE
t=# insert into tj select 'SAMPLE',0,1;
INSERT 0 1
t=# select * from tj;
MAC_ADDR | PC_OPT | SHOW_ADDR
----------+--------+-----------
SAMPLE | 0 | 1
(1 row)
t=# update tj set "MAC_ADDR"=j."MAC_ADDR", "PC_OPT"=j."PC_OPT", "SHOW_ADDR"=j."SHOW_ADDR"
from json_populate_record(null::tj,'{"MAC_ADDR": "NEWADDR", "PC_OPT": 1, "SHOW_ADDR": 0}') j
where true;
UPDATE 1
t=# select * from tj;
MAC_ADDR | PC_OPT | SHOW_ADDR
----------+--------+-----------
NEWADDR | 1 | 0
(1 row)
garder à l'esprit - vous ne spécifiez pas PK ou une autre colonne de mettre à jour les lignes si toutes les lignes seront mis à jour dans l'exemple ci-dessus. Ce qui convient à votre échantillon de données, mais ne serait pas en cas de données plus
Mise à jour
j'ai mal compris la question, dans (code, value)
table, il est encore plus facile, par exemple:
update some_tbl
set "Value" = '{"MAC_ADDR": "NEWADDR", "PC_OPT": 1, "SHOW_ADDR": 0}'::json->'MAC_ADDR'
where "Code"='MAC_ADDR'
o à nouveau, en utilisant le code ci-dessus vous pouvez mettre à jour la carte avec les clés json ...
mes colonnes de table sont 'Code' &' Value' –
merci pour la mise à jour, mais avez-vous un moyen de faire défiler chaque clé JSON et tout en effectuant un up date en même temps? Il y aura des tonnes de rangées à ajouter bientôt. –