Tak, to cecha Postgresa, a rozmieszczanie równoległe jest gwarantowane być zsynchronizowane (o ile wszystkie tablice mają taką samą liczbę elementów).
Postgres 9.4 dodaje czyste rozwiązanie do równoległego rozgnieżdżania:
- Rozgrupuj wiele tablic równolegle
Jednak kolejność wynikowych wierszy nie jest gwarantowana. Właściwie za pomocą tak prostego stwierdzenia jak:
SELECT unnest(ARRAY[5,3,9]) AS id
wynikowa kolejność wierszy jest „gwarantowana”, ale Postgres niczego nie potwierdza. Optymalizator zapytań może dowolnie porządkować wiersze według własnego uznania, o ile kolejność nie jest wyraźnie zdefiniowana. Może to mieć skutki uboczne w przypadku bardziej złożonych zapytań.
Jeśli drugie zapytanie w Twoim pytaniu jest tym, czego faktycznie potrzebujesz (dodaj numer indeksu do niezagnieżdżonych elementów tablicy), istnieje lepszy sposób za pomocą generate_subscripts() :
SELECT unnest(ARRAY[5,3,9]) AS id
, generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER BY idx;
Szczegóły w tej powiązanej odpowiedzi:
- Jak uzyskać dostęp do wewnętrznego indeksu tablicy za pomocą postgreSQL?
Będziesz zainteresowany WITH ORDINALITY
w Postgresie 9.4 :
- PostgreSQL unnest() z numerem elementu
Następnie możesz użyć:
SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);