繁体   English   中英

插入PostgreSql Jsonb列时,字符串操作会引发错误

[英]String Manipulation throws error while Inserting into PostgreSql Jsonb Column

我有以下代码,将数据插入到我的表res中ID bigserial, 结果 jsonb不为null)。 我想插入数据,以便在“显示”列中始终附加“ i”,以便每一行的“显示”列都有不同的值。

DO $$
declare cnt bigint;
BEGIN
FOR i IN 1..2 LOOP
    INSERT INTO res (Results)
        VALUES ('{"cid":"CID1","Display":"User One'|| i || '","FName":"Userfff","LName":"One"}'); 
    INSERT INTO res (Results)
        VALUES ('{"cid":"CID1","Display":"User One'|| i || '","FName":"Userfff","LName":"One"}');
    INSERT INTO res (Results)
        VALUES ('{"cid":"CID1","Display":"User One'|| i || '","FName":"Userfff","LName":"One"}');
END LOOP;
END;
$$
LANGUAGE plpgsql;

但是,当我运行此代码时,出现以下错误:

ERROR:  column "results" is of type jsonb but expression is of type text
LINE 2:             VALUES ('{"cid":"CID1","Display":"User One'|| i ...
                        ^
HINT:  You will need to rewrite or cast the expression.

我应该如何修改查询以使查询成功运行?

不需要循环,甚至不需要PL / pgSQL。

您可以使用generate_series()生成任意数量的行

要将值放入字符串中,我更喜欢使用format()因为这样可以更轻松地处理字符串:

insert into res(results)
select format('{"cid":"CID1","Display":"User One %s","FName":"Userfff","LName":"One"}', i::text)::jsonb
from generate_series(1,5) g(i);

format()函数的第二个参数将放在第一个参数中%s的位置。

上面插入了5行,每行有不同的display值。 这就是您在问题中所说的。 但是,您的示例代码总共插入了6行,其中3行具有相同display值。

暂无
暂无

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

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