2017-02-02 22 views
0

への挿入中にエラーがスローされます私の私のテーブルに解像度ID BIGSERIAL結果 jsonb nullではない)にデータを挿入するために、次のコードを持っています。私は '表示'列に常に 'i'が付加されているように、すべての行に '表示'列の値が異なるようにデータを挿入します。クエリが正常に実行されるように文字列操作は、PostgreSQL Jsonb列

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. 

どのように私は私のクエリを変更する必要があります。私はこのコードを実行すると

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; 

はしかし、私は次のエラーを取得しますか?

+0

あなたのループは、 'Display'と同じ値を持つ3行の6行を挿入します。 –

答えて

1

ループやPL/pgSQLは不要です。

あなたはそれが非常に簡単に文字列を扱う作るように私は format()を使用することを好む文字列に値を入れるために

generate_series()を使用して任意の数の行を生成することができます

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); 

第2パラメータformat()ファンクションは、最初のパラメータに%sが配置されます。

displayの値が異なる5行がそれぞれ挿入されています。これはあなたの質問に述べたとおりです。ただし、サンプルコードでは、3行がdisplayと同じの値を持つ合計6行が挿入されます。

+0

ありがとう、それは仕事をする – puneet