2017-09-27 15 views
0

私はこのようになりますアプリ設定のテーブルを持っている:jsonキーに基づいて更新するには?

Code  | Value | 
--------------------- 
MAC_ADDR | 'SAMPLE'| 
PC_OPT | 0  | 
SHOW_ADDR | 1  | 

は、その後、私はこのように私のトリガ機能でJSONを受けています:

{MAC_ADDR: 'NEWADDR', PC_OPT: 1, SHOW_ADDR: 0} 

私はベースの更新を実行するにはどうすればよいです私のjsonのすべての鍵で?

あなただけ json_populate_record、例えばを使用することができます

答えて

0

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) 

は念頭に置いておく - あなたはとてもすべての行は、上記の例で更新される行を更新するために、PKや他の列が指定されていませんでした。これはあなたのデータサンプルに合った、だろうがありません、私はそれは例えば、さらに簡単です(code, value)の表に、質問を誤解

より多くのデータ

アップデートの場合:

update some_tbl 
    set "Value" = '{"MAC_ADDR": "NEWADDR", "PC_OPT": 1, "SHOW_ADDR": 0}'::json->'MAC_ADDR' 
where "Code"='MAC_ADDR' 

O再び、使用して上記のコードはjsonのキーで更新をマップすることができます...

+0

私のテーブルの列は 'Code'と' Value'です –

+0

更新のためにありがとう、しかしあなたは各jsonキーをループし&アップを実行する方法があります同時に日付?すぐにたくさんの行が追加されます。 –

関連する問題