postgresql 如何将jsonb_set与“WITH AS”变量一起使用?

ctehm74n  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(140)

我尝试使用jsonb_set更改Postgres表中jsonb对象的单个属性。
我正在使用WITH random_string AS将变量random_string设置为一个随机的十六进制值,然后将该字符串传递到我的UPDATE查询中。
这是我正在使用的代码:

WITH random_string AS (SELECT  substr(md5(random()::text), 0, 25)::varchar)

UPDATE 
    teams 
SET 
    profile = jsonb_set(profile, '{api_key}', random_string)
WHERE
    team_id="abc123";

我得到的错误似乎认为我正在尝试访问一个不存在的列,因为这是您通常引用列的方式。

Postgres query failed, PostgresPlugin query failed to execute: error: column "random_string" does not exist

问题:如何在jsonb_set函数中使用random_string变量来更新此属性?

yyyllmsg

yyyllmsg1#

有三个问题。首先,WITH语句给出了一个类似于表的结果,而不是一个变量。定义一个具有单列的表,并在UPDATEFROM子句中使用它的名称。其次,jsonb_set()的第三个参数是jsonb,使用to_jsonb()。最后,正确的文本文字用单引号括起来'abc123'

WITH var(random_string) AS (SELECT substr(md5(random()::text), 0, 25)::varchar)

UPDATE 
    teams 
SET 
    profile = jsonb_set(profile, '{api_key}', to_jsonb(random_string))
FROM
    var
WHERE
    team_id = 'abc123';

相关问题