繁体   English   中英

Postgres Update with json 记录?

[英]Postgres Update with json to record?

我试图找到一个简单的解决方案来使用 json_to_record 语句更新数据。 我想每晚用我通过 web_craping 获得的 json_array 更新数据。 知道有新文章时我该如何解决问题吗?
非常感谢:)

INSERT INTO prices
Select * from
  json_to_record(
    '{"distributor“: "1", "articelnr": 4711,  "price": „700“, "delivery": "too late", "created_on": "2022-09-25 03:14:07"}'
  ) AS x(distributor INT, articelnr VARCHAR, price VARCHAR, delivery VARCHAR, created_on TIMESTAMP)

是否可以以类似的方式使用更新语句:

UPDATE prices
SET
  json_to_record(
    '{"distributor“: "1", "articelnr": 4711,  "price": „700“, "delivery": "too late", "created_on": "2022-09-25 03:14:07"}'
  ) AS x(distributor INT, articelnr VARCHAR, price VARCHAR, delivery VARCHAR, created_on TIMESTAMP)

根据UPDATE 语法,可以使用子选择更新表,例如:

update prices set
(distributor, articelnr, price, delivery, created_on) = 
(
    select * 
    from json_to_record(
        '{"distributor": "1", "articelnr": 4711,  "price": "700", "delivery": "too late", "created_on": "2022-09-25 03:14:07"}'
    ) as x(distributor int, articelnr varchar, price varchar, delivery varchar, created_on timestamp)
)
where distributor = 1 and articelnr = 4711

遗憾的是,子选择结果在WHERE子句中不可见。 因此,使用FROM部分中的查询似乎更合适,例如:

update prices p set
    (distributor, articelnr, price, delivery, created_on) = 
    (x.distributor, x.articelnr, x.price, x.delivery, x.created_on)
from (
    select * 
    from json_to_record(
        '{"distributor": "1", "articelnr": 4711,  "price": "700", "delivery": "too late", "created_on": "2022-09-25 03:14:07"}'
    ) as x(distributor int, articelnr varchar, price varchar, delivery varchar, created_on timestamp)
) as x
where p.distributor = x.distributor and p.articelnr = x.articelnr

请注意,您需要唯一的列(通常是主键)来标识要更新的行。 示例假设它们是(distributor, articelnr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM