url: https://stackoverflow.com/questions/39224382/how-can-i-import-a-json-file-into-postgresql

  • How can I import a JSON file into PostgreSQL?

    You can feed the JSON into a SQL statement that extracts the information and inserts that into the table. If the JSON attributes have exactly the name as the table columns you can do something like this:

    <span class="kwd">with</span><span class="pln"> customer_json </span><span class="pun">(</span><span class="pln">doc</span><span class="pun">)</span> <span class="kwd">as</span> <span class="pun">(</span>
       <span class="kwd">values</span> 
        <span class="pun">(</span><span class="str">'[
          {
            "id": 23635,
            "name": "Jerry Green",
            "comment": "Imported from facebook."
          },
          {
            "id": 23636,
            "name": "John Wayne",
            "comment": "Imported from facebook."
          }
        ]'</span><span class="pun">::</span><span class="pln">json</span><span class="pun">)</span>
    <span class="pun">)</span>
    <span class="kwd">insert</span> <span class="kwd">into</span><span class="pln"> customer </span><span class="pun">(</span><span class="pln">id</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">,</span><span class="pln"> comment</span><span class="pun">)</span>
    <span class="kwd">select</span><span class="pln"> p</span><span class="pun">.*</span>
    <span class="kwd">from</span><span class="pln"> customer_json l
      </span><span class="kwd">cross</span> <span class="kwd">join</span><span class="pln"> lateral json_populate_recordset</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">::</span><span class="pln">customer</span><span class="pun">,</span><span class="pln"> doc</span><span class="pun">)</span> <span class="kwd">as</span><span class="pln"> p
    </span><span class="kwd">on</span><span class="pln"> conflict </span><span class="pun">(</span><span class="pln">id</span><span class="pun">)</span><span class="pln"> do </span><span class="kwd">update</span> 
      <span class="kwd">set</span><span class="pln"> name </span><span class="pun">=</span><span class="pln"> excluded</span><span class="pun">.</span><span class="pln">name</span><span class="pun">,</span><span class="pln"> 
          comment </span><span class="pun">=</span><span class="pln"> excluded</span><span class="pun">.</span><span class="pln">comment</span><span class="pun">;</span>

    New customers will be inserted, existing ones will be updated. The “magic” part is the <span style="color: #242729;">json_populate_recordset(null::customer, doc)</span> which generates a relational representation of the JSON objects.