214 votes

PostgreSQL - nombre maximal de paramètres dans la clause "IN" ?

Dans Postgres, vous pouvez spécifier une clause IN, comme ceci :

SELECT * FROM user WHERE id IN (1000, 1001, 1002)

Quelqu'un sait-il quel est le nombre maximum de paramètres que l'on peut passer dans IN ?

14voto

Andrew Points 529

Je viens de l'essayer. La réponse est -> nombre entier hors de portée comme valeur de 2 octets : 32768

7voto

Bill Karwin Points 204877

Quel est le nombre maximum de paramètres que vous pouvez passer dans IN ?

Si vous devez poser cette question, vous devriez probablement charger les valeurs dans une table temporaire et ensuite exécuter un JOIN contre cette table temporaire au lieu d'un prédicat IN.

1voto

PatrikAkerstrand Points 23968

Vous pourriez envisager de remanier cette requête au lieu d'ajouter une liste d'identifiants arbitrairement longue... Vous pourriez utiliser une plage si les identifiants suivent effectivement le modèle de votre exemple :

SELECT * FROM user WHERE id >= minValue AND id <= maxValue;

Une autre option consiste à ajouter une sélection intérieure :

SELECT * 
FROM user 
WHERE id IN (
    SELECT userId
    FROM ForumThreads ft
    WHERE ft.id = X
);

0voto

hacker13ua Points 649

Si vous avez des requêtes comme :

SELECT * FROM user WHERE id IN (1, 2, 3, 4 -- and thousands of another keys)

vous pouvez augmenter les performances si vous réécrivez votre requête comme suit :

SELECT * FROM user WHERE id = ANY(VALUES (1), (2), (3), (4) -- and thousands of another keys)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X