Да, това е характеристика на Postgres и паралелното разглобяване е гарантирано да бъдат в синхрон (стига всички масиви да имат еднакъв брой елементи).
Postgres 9.4 добавя чисто решение за паралелно unnest:
- Отвържете паралелно множество масиви
Редът на получените редове обаче не е гарантиран. Всъщност с едно просто изявление като:
SELECT unnest(ARRAY[5,3,9]) AS id
полученият ред на редовете е "гарантиран", но Postgres не твърди нищо. Оптимизаторът на заявки е свободен да подрежда редове, както намери за добре, стига редът да не е изрично дефиниран. Това може да има странични ефекти при по-сложни заявки.
Ако втората заявка във вашия въпрос е това, което всъщност искате (добавете номер на индекс към невложени елементи на масив), има по-добър начин с generate_subscripts() :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
Подробности в този свързан отговор:
- Как да получите достъп до вътрешния индекс на масива с postgreSQL?
Ще се интересувате от WITH ORDINALITY
в Postgres 9.4 :
- PostgreSQL unnest() с номер на елемент
След това можете да използвате:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);