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,&quot;{&quot;&quot;name&quot;&quot;: &quot;&quot;whatever&quot;&quot;}&quot;</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-----