sql >> Database >  >> RDS >> PostgreSQL

Parallelle unnest() en sorteervolgorde in PostgreSQL

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


  1. Wat is reeks in orakel

  2. PIVOT gebruiken in SQL Server 2008

  3. UTL_FILE.FREMOVE Voorbeeld:een bestand verwijderen in Oracle

  4. Hoe kan ik verbinding maken met de Oracle Database 11g-server via ssh-tunnelketen (dubbele tunnel, server in bedrijfsnetwerk)?