# Documentation Django 5.2.8

# Expressions de requête spécifiques à PostgreSQL

Ces expressions sont disponibles dans le module `django.contrib.postgres.expressions`.

## Expressions `ArraySubquery()`

class ArraySubquery(queryset)

`ArraySubquery` est une sous-requête `Subquery` qui utilise le constructeur PostgreSQL `ARRAY` pour construire une liste de valeurs du jeu de requêtem qui doit utiliser `QuerySet.values()` pour ne renvoyer qu’une seule colonne.

Cette classe diffère de `ArrayAgg` dans le sens où elle n’agit pas comme une fonction d’agrégat et n’exige pas de clause SQL `GROUP BY` pour construire la liste des valeurs.

Par exemple, si vous souhaitez annoter tous les livres liés à un auteur sous forme d’objet JSON :

    >>> from django.db.models import OuterRef
    >>> from django.db.models.functions import JSONObject
    >>> from django.contrib.postgres.expressions import ArraySubquery
    >>> books = Book.objects.filter(author=OuterRef("pk")).values(
    ...     json=JSONObject(title="title", pages="pages")
    ... )
    >>> author = Author.objects.annotate(books=ArraySubquery(books)).first()
    >>> author.books
    [{'title': 'Solaris', 'pages': 204}, {'title': 'The Cyberiad', 'pages': 295}]