Ja, dat is een kenmerk van Postgres en parallelle unnesting is gegarandeerd synchroon moeten zijn (zolang alle arrays hetzelfde aantal elementen hebben).
Postgres 9.4 voegt een schone oplossing toe voor parallelle unnest:
- Meerdere arrays parallel verwijderen
De volgorde van de resulterende rijen is echter niet gegarandeerd. Eigenlijk met een statement zo simpel als:
SELECT unnest(ARRAY[5,3,9]) AS id
de resulterende volgorde van rijen is "gegarandeerd", maar Postgres beweert niets. De query-optimizer is vrij om rijen naar eigen goeddunken te ordenen, zolang de volgorde niet expliciet is gedefinieerd. Dit kan bijwerkingen hebben bij complexere zoekopdrachten.
Als de tweede query in uw vraag is wat u eigenlijk wilt (voeg een indexnummer toe aan niet-geneste array-elementen), dan is er een betere manier met generate_subscripts() :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
Details in dit gerelateerde antwoord:
- Hoe krijg ik toegang tot de interne array-index met postgreSQL?
U zult geïnteresseerd zijn in WITH ORDINALITY
in Postgres 9,4 :
- PostgreSQL unnest() met elementnummer
Dan kunt u het volgende gebruiken:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);