sql >> Database teknologi >  >> RDS >> PostgreSQL

Parallel unnest() og sorteringsrækkefølge i PostgreSQL

Ja, det er en egenskab ved Postgres, og parallel unnesting er garanteret at være synkroniseret (så længe alle arrays har det samme antal elementer).
Postgres 9.4 tilføjer en ren løsning til parallel unnest:

  • Unnest flere arrays parallelt

Rækkefølgen af ​​resulterende rækker er dog ikke garanteret. Faktisk med et så simpelt udsagn som:

SELECT unnest(ARRAY[5,3,9]) AS id

den resulterende rækkefølge af rækker er "garanteret", men Postgres hævder ikke noget. Forespørgselsoptimeringsværktøjet kan frit bestille rækker, som det finder passende, så længe rækkefølgen ikke er eksplicit defineret. Dette kan have bivirkninger i mere komplekse forespørgsler.

Hvis den anden forespørgsel i dit spørgsmål er, hvad du rent faktisk ønsker (tilføj et indeksnummer til ikke-indlejrede array-elementer), er der en bedre måde 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 dette relaterede svar:

  • Hvordan får man adgang til det interne array-indeks med postgreSQL?

Du vil være interesseret i WITH ORDINALITY i Postgres 9.4 :

  • PostgreSQL unnest() med elementnummer

Så kan du bruge:

SELECT * FROM unnest(ARRAY[5,3,9]) WITH ORDINALITY tbl(id, idx);


  1. Bruger Oracle kortslutningsevaluering?

  2. NLS_COLLATION_ID() Funktion i Oracle

  3. Indlæser billeddata i BLOB-kolonner i Oracle

  4. Hvordan fungerer Stuff og 'For XML Path' i SQL Server?