Подход, основанный на множестве, обычно намного быстрее (и короче и менее подвержен ошибкам), чем зацикливание.
Использование настройки вашего ответ , который в значительной степени отличается от ответа на ваш вопрос.
INSERT INTO table2(myfield, data) -- cleaner: explicit target columns
SELECT k."myField", j.i ->> 'data'
FROM table1 k, json_array_elements(k."ScrapedJson" -> 'calendar_days') j(i)
WHERE NOT k."HasBeenProcessed"
-- ORDER BY ??? -- you might want to order rows favorably?
Неявное LATERAL
соединение является ключевой техникой здесь.
... FROM table1 k, json_array_elements(...) ...
- это сокращение от:
... FROM table1 k
CROSS JOIN LATERAL json_array_elements(...) ...
Очевидно, "ScrapedJson" -> 'calendar_days'
- это массив JSON, а не «список», как вы написали в вопросе.
:
В сторонах
Сделайте себе одолжение и избегайтедвойные кавычки CaMeL-падежа в Postgres.Беспорядочная комбинация идентификаторов в кавычках и без кавычек в вашем вопросе и ответе только вводит в заблуждение.Я процитировал названия столбцов в вашем вопросе, чтобы несколько соответствовать вашему ответу.Мой постоянный совет: используйте только легальные, строчные, без кавычек имена.
Рассмотрите данныеДля большинства рабочих нагрузок введите jsonb
вместо json
.