2017-02-02 5 views
0

ich den folgenden Code, Daten in meine Tabelle einzufügen res (ID bigserial, Ergebnisse jsonb nicht null). Ich möchte Daten einfügen, so dass in der Spalte "Anzeige" immer das "i" angehängt ist, so dass jede Zeile einen anderen Wert für die Spalte "Anzeige" hat.String Manipulation wirft Fehler beim Einfügen in PostgreSql Jsonb Spalte

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; 

Allerdings, wenn ich diesen Code ausführen, bekomme ich folgende Fehlermeldung:

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. 

Wie soll ich meine Abfrage ändern, so dass die Abfrage erfolgreich ausgeführt?

+0

Ihre Schleife wird 6 Zeilen mit 3 Zeilen mit dem gleichen Wert für "Display" einfügen ist das wirklich was Sie wollen? –

Antwort

1

Keine Notwendigkeit für eine Schleife oder sogar PL/pgSQL.

Sie können eine beliebige Anzahl von Zeilen erzeugen kann generate_series()

mit Um einen Wert in einen String lege ich lieber format() verwenden, wie das viel einfacher mit Streichern Umgang macht:

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

Der zweite Parameter zu die format() Funktion wird wo der %s in den ersten Parameter gesetzt.

Das obige fügt 5 Zeilen mit jeweils einem anderen Wert für display ein. Das haben Sie in Ihrer Frage angegeben. Ihr Beispielcode fügt jedoch insgesamt 6 Zeilen ein, wobei 3 Zeilen den gleichen Wert für display haben.

+0

Danke, es macht den Job – puneet

Verwandte Themen