Ja, det är en egenskap hos Postgres och parallell odling är garanterad för att vara synkroniserad (så länge alla arrayer har samma antal element).
Postgres 9.4 lägger till en ren lösning för parallell unnest:
- Unnesta flera arrayer parallellt
Ordningen på de resulterande raderna är dock inte garanterad. Egentligen med ett så enkelt uttalande som:
SELECT unnest(ARRAY[5,3,9]) AS id
den resulterande ordningen av rader är "garanterad", men Postgres hävdar ingenting. Frågeoptimeraren är fri att beställa rader som den vill så länge som ordningen inte är explicit definierad. Detta kan ha biverkningar i mer komplexa frågor.
Om den andra frågan i din fråga är vad du faktiskt vill ha (lägg till ett indexnummer till okapslade arrayelement), finns det ett bättre sätt med generate_subscripts() :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
Detaljer i detta relaterade svar:
- Hur får man åtkomst till array internt index med postgreSQL?
Du kommer att vara intresserad av WITH ORDINALITY
i Postgres 9.4 :
- PostgreSQL unnest() med elementnummer
Då kan du använda:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);