Re: Error inserting JSON string to Postgres DB
Felix Schumacher <[email protected]> Sat, 2 Dec 2023 14:48:40 +0100
| Newsgroups | gmane.comp.jakarta.jmeter.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Jun,
I have attached a working minimal example, that uses a JSON string and
inserts that with a prepared statement.
It assumes a locally running postgres which can be changed of course.
The interesting part is:
* You have to escape comma and quotes in the JSON string.
Given a JSON object like {"name": "whatever"} you will have to add
quotes to mask the comma and quotes to mask the quotes.
Your string will have to look like "{""name"": ""whatever""}"
* You have to cast the parameter to json in your insert statement.
Add a ::json to the placeholder, as in "insert into something values
(?::json)"
Regards
Felix
Am 02.12.23 um 14:19 schrieb Jun Zhuang:
> Hi Filex,
>
> Thanks for the response. I tried with the single quotes and singles
> quotes + ::json, still got the same error.
>
> Just to be sure, are you using a Postgres DB? Also one thing I forgot
> to mentioned in my original email was the field I am trying to insert
> into is of data type *text* instead of varchar, I wonder if that makes
> any difference?
>
> Following are some screenshots of what I am trying to do:
>
> Inline image
>
>
> Inline image
>
>
> Inline image
>
>
>
> On Saturday, December 2, 2023 at 05:58:52 AM EST, Felix Schumacher
> <[email protected]> wrote:
>
>
>
>
>
>
> Hi Jun,
>
> I am not sure, what you tried already. When I place the following text
> into a JDBC Sampler's query field, I get no errors:
>
> create table something (id int, data json);
> insert into something values (1, '{"name": "whatever"}'::json);
>
> Same result, when I remove the casting and use
>
> create table something (id int, data json);
> insert into something values (1, '{"name": "whatever"}');
>
> Can you show us a minimal example that fails for you?
>
>
>
>
>
> Regards
>
> Felix
>
>
>
>
> Am 01.12.23 um 23:24 schrieb Jun Zhuang:
>
>
> > Hi,
> > I am getting Cannot have quote-char in plain field:['{"] error when
> trying to insert a JSON string into a Postgres DB table using JDBC
> request.
> > I tried the following but nothing worked:
> > - place the JSON string in single quotes,
> > - escaping the double quotes with \",
> > - placing the string in $$<JSON string here>$$ but nothing worked.
> > There is no issue with the connection and other select/insert
> queries and I was able to insert from pgAdmin with the same string in
> single quotes though.
> > The JSON string looks like this: {"A":"A", "B":[{"C":"C"}]}
> > I am really out of ideas at this time. Can someone help?
> > Thanks,Jun
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:[email protected]
> For additional commands, e-mail:[email protected]
json_with_postgres.jmx
(text/xml, 6.9 KB)
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.3-SNAPSHOT 91d8aea">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<stringProp name="LoopController.loops">1</stringProp>
<boolProp name="LoopController.continue_forever">false</boolProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.delayedStart">false</boolProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>
<hashTree>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<url>true</url>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<JDBCDataSource guiclass="TestBeanGUI" testclass="JDBCDataSource" testname="JDBC Connection Configuration" enabled="true">
<boolProp name="autocommit">false</boolProp>
<stringProp name="checkQuery"></stringProp>
<stringProp name="connectionAge">5000</stringProp>
<stringProp name="connectionProperties"></stringProp>
<stringProp name="dataSource">db</stringProp>
<stringProp name="dbUrl">jdbc:postgresql://localhost:5432/</stringProp>
<stringProp name="driver">org.postgresql.Driver</stringProp>
<stringProp name="initQuery"></stringProp>
<boolProp name="keepAlive">true</boolProp>
<stringProp name="password">secret</stringProp>
<stringProp name="poolMax">0</stringProp>
<boolProp name="preinit">false</boolProp>
<stringProp name="timeout">10000</stringProp>
<stringProp name="transactionIsolation">DEFAULT</stringProp>
<stringProp name="trimInterval">60000</stringProp>
<stringProp name="username">postgres</stringProp>
</JDBCDataSource>
<hashTree/>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="Create table in DB" enabled="true">
<stringProp name="dataSource">db</stringProp>
<stringProp name="query">create table something (id int, data json);</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="queryType">Update Statement</stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
<stringProp name="resultSetMaxRows"></stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="variableNames"></stringProp>
</JDBCSampler>
<hashTree/>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="Insert JSON into DB" enabled="true">
<stringProp name="dataSource">db</stringProp>
<stringProp name="queryType">Prepared Update Statement</stringProp>
<stringProp name="query">insert into something values (?, ?)</stringProp>
<stringProp name="queryArguments">1,"{""name"": ""whatever""}"</stringProp>
<stringProp name="queryArgumentsTypes">integer, varchar</stringProp>
<stringProp name="variableNames"></stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="resultSetMaxRows"></stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
</JDBCSampler>
<hashTree/>
<JDBCSampler guiclass="TestBeanGUI" testclass="JDBCSampler" testname="Read all from DB" enabled="true">
<stringProp name="dataSource">db</stringProp>
<stringProp name="queryType">Select Statement</stringProp>
<stringProp name="query">select * from something</stringProp>
<stringProp name="queryArguments"></stringProp>
<stringProp name="queryArgumentsTypes"></stringProp>
<stringProp name="variableNames"></stringProp>
<stringProp name="resultVariable"></stringProp>
<stringProp name="queryTimeout"></stringProp>
<stringProp name="resultSetMaxRows"></stringProp>
<stringProp name="resultSetHandler">Store as String</stringProp>
</JDBCSampler>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
OpenPGP_0xEA6C3728EA91C4AF.asc
(application/pgp-keys, 6.1 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 nyAr19E4ak4DNpOwsCg= =qyMV -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEDs+MuKeoubnIVCacFeyN7C+3FrcFAmVrNbgFAwAAAAAACgkQFeyN7C+3FrfC HxAA0FpTGEO1XwE+BxZcApJBqjw7QcauB5RCD5JpJLiwsWRmrjXqnwhEoLIOqHpL+d0Bt6YIQCVt PZT/DdNEbW31zGZKaJp8wLXuGMBGXBrsJT+WN5ZBf2FGFuSlLr8sSa7TpwvP+YbVCWj/t3ADr5Ox rCzGG66MLt9Zp0ptbyCDm7OMDNME/OmooMxJVNlqYUoSHAX2t4i3zhzp1ju7FoW52JfjuPQ0bcAb 10AsOknv3WaFV0v/gu0mAZHWobx7nPheUDNmFkAesaXz46B6+bX72UncF0/MtkA4ltuzU2TzYVwj JjANEhhxcj8dI772/XgUysDQN6BlzkEKQM7fAQfLNSnsoe6ixnr/tIhzL6I1CYVoawYlHSBrJyyg c3rlsaYkA1qGTisuQifwPnj3vHHiYDTnOIVpYkmSQDJHT+XFqXMeI88c1JWgdZHoy8RPXz7ihNJM Ad24pyCZfZrCfub+JHF1nAeXOALhRE1YQIMjOe4evbGpcHiobqML0ucKhws8poKLfn+xLQKiJQWh gWHLMnwQ93yyvjA79o+hWTbbwPTlwBRbZUDjFq0d1ADOfzmNT1AaQXk4OTEd5WPJjzIfdaGphSZV jknA/phwGQxb95o7hNl3oEw/ir/2urjMDjsAMI3B+Dgw3Hwe+0g5i4FxXT8h0YXkPP6LBIw3vFUC bG8= =aoHn -----END PGP SIGNATURE-----