1

I have two tables, table_with_json which has id and text column in which a valid json is stored that has structure like:

{
"workers":
 [
  {
  "name":"Anne",
  "email":"[email protected]"
  },
  {
  "name":"Tom",
  "email":"[email protected]"
  }
 ]
}

and emails table which has two columns: table_with_json_id (a foreign key to table_with_json) and email

I need to fill up the emails table but I'm having trouble creating more than one row for each row in table_with_json

the result I want for above example would be inserting two rows to emails table

1 | id1 | [email protected]
2 | id1 | [email protected]

So far I've managed to get one row for every entry in table_with_json with this SQL:

INSERT INTO emails (table_with_json_id, email) 
SELECT id, text::json->'workers'->0->'email' 
FROM table_with_json;
1

1 Answer 1

2

You can try something like this (result here)

INSERT INTO emails (table_with_json_id, email) 
SELECT id, json_array_elements(text::json->'workers')->>'email'
FROM table_with_json;
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.