Ano, to je vlastnost Postgresu a paralelní rozkládání je zaručeno být v synchronizaci (pokud všechna pole mají stejný počet prvků).
Postgres 9.4 přidává čisté řešení pro paralelní unnest:
- Uvolněte paralelně několik polí
Pořadí výsledných řádků však není zaručeno. Vlastně s tak jednoduchým prohlášením jako:
SELECT unnest(ARRAY[5,3,9]) AS id
výsledné pořadí řádků je "zaručené", ale Postgres nic netvrdí. Optimalizátor dotazů může volně objednávat řádky, jak uzná za vhodné, pokud pořadí není explicitně definováno. To může mít vedlejší účinky u složitějších dotazů.
Pokud je druhý dotaz ve vaší otázce to, co skutečně chcete (přidat indexové číslo k nevnořeným prvkům pole), existuje lepší způsob s generate_subscripts() :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
Podrobnosti v této související odpovědi:
- Jak získat přístup k internímu indexu pole pomocí postgreSQL?
Bude vás zajímat WITH ORDINALITY
v Postgres 9.4 :
- PostgreSQL unnest() s číslem prvku
Pak můžete použít:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);