2017-02-02 36 views
0

我有以下代碼,將數據插入到我的表水庫ID BIGSERIAL, 結果 jsonb不爲空)。我想要插入數據,以便'Display'列總是添加'i',這樣每行的'Display'列都有不同的值。字符串操作拋出錯誤而將插入到的PostgreSQL Jsonb柱

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. 

我應該如何修改我的查詢,以便查詢運行成功?

+0

您的循環將插入6行,其中3行具有相同的「Display」值,這真的是您想要的嗎? –

回答

1

不需要循環甚至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

+0

謝謝,它完成這項工作 – puneet

相關問題