| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | Арсен Арутюнян <arutar(at)bk(dot)ru> |
| Cc: | pgsql-bugs(at)postgresql(dot)org |
| Subject: | Re: Error in SPI_execute_plan (when inserting JSON from C code first { simboll is lost) |
| Date: | 2017-06-26 22:59:27 |
| Message-ID: | 24940.1498517967@sss.pgh.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
=?UTF-8?B?0JDRgNGB0LXQvSDQkNGA0YPRgtGO0L3Rj9C9?= <arutar(at)bk(dot)ru> writes:
> StringInfo JsonObject = makeStringInfo();
> appendStringInfoString(JsonObject, "{\"ObjectName\":\"Bug Json Object\",\"Type\":227,\"Command\":88}");
> Datum Values[2];
> Values[0] = Int32GetDatum(227);
> Values[1] = CStringGetDatum(JsonObject->data);
That's certainly not going to work, because a CString datum doesn't
have the same representation as a JSON datum.
I think you could get away with using CStringGetTextDatum, relying on
the equivalent physical representations of JSON and text. But it
wouldn't be a terribly good idea IMO, partly because you'd be passing
up validity checking on the JSON string; plus you could never make
that work for JSONB. What you really should do instead is pass the
CString to JSON's input function, say
Values[1] = OidInputFunctionCall(F_JSON_IN, JsonObject->data, JSONOID, -1);
This is still cheating a bit --- it knows more than it ought to about
what to pass for typioparam --- but it's unlikely to break.
regards, tom lane
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Thomas_OReilly | 2017-06-27 07:40:29 | libpq.so.5 dependancy error installing pgsql onto linux 6. |
| Previous Message | Andres Freund | 2017-06-26 22:35:36 | Re: Error in SPI_execute_plan (when inserting JSON from C code first { simboll is lost) |