PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Parallèle unnest() et ordre de tri dans PostgreSQL

Oui, c'est une fonctionnalité de Postgres et la désimbrication parallèle est garantie pour être synchronisés (tant que tous les tableaux ont le même nombre d'éléments).
Postgres 9.4 ajoute une solution propre pour la désimbrication parallèle :

  • Désimbriquer plusieurs baies en parallèle

L'ordre des lignes résultantes n'est cependant pas garanti. En fait, avec une déclaration aussi simple que :

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

l'ordre résultant des lignes est "garanti", mais Postgres n'affirme rien. L'optimiseur de requête est libre d'ordonner les lignes comme il l'entend tant que l'ordre n'est pas explicitement défini. Cela peut avoir des effets secondaires dans les requêtes plus complexes.

Si la deuxième requête de votre question correspond à ce que vous voulez réellement (ajouter un numéro d'index aux éléments de tableau non imbriqués), il existe un meilleur moyen avec generate_subscripts() :

SELECT unnest(ARRAY[5,3,9]) AS id
     , generate_subscripts(ARRAY[5,3,9], 1) AS idx
ORDER  BY idx;

Détails dans cette réponse connexe :

  • Comment accéder à l'index interne du tableau avec postgreSQL ?

Vous serez intéressé par WITH ORDINALITY dans Postgres 9.4 :

  • PostgreSQL unnest() avec le numéro d'élément

Ensuite, vous pouvez utiliser :

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