PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Równoległe unnest() i porządek sortowania w PostgreSQL

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalacja PostgreSQL 9 w systemie Windows:Nie można pisać w ścieżce środowiska TEMP.

  2. Funkcja MIN() w PostgreSQL

  3. PostgreSQL GROUP_CONCAT() Odpowiednik

  4. PgBouncer 1.7 – „Kolory różnią się po zmartwychwstaniu”

  5. jaki jest dobry sposób na poziomy shard w postgresql