Когда из приложения нужно передать список
id в SQL, многие пишут IN (... , ... , ...), что увеличивает текст SQL и усложняет работу с prepared statements:WHERE id IN (1,2,3,4,5,6,7)
PostgreSQL умеет принимать массив и сравнивать его через
ANY — это короче и позволяет избежать генерации динамического SQL:WHERE id = ANY($1)
Приложение просто передаёт массив параметром, а текст запроса остаётся неизменным независимо от длины списка:
SELECT *
FROM users
WHERE email = ANY($1);
На практике полезно явно указывать тип массива
($1::bigint[]), а также помнить, что NULL внутри массива влияет на результат сравнения.🔥 Этот паттерн особенно удобен для
batch-запросов, API-фильтров и массовых выборок, где количество значений может сильно меняться.➡️ SQL Ready | #совет
