In base alla parte del messaggio di errore operator does not exist: integer = integer[] , sembra che il bs la colonna deve essere unnest ed, per riportare il lato destro a un integer quindi è possibile trovare l'operatore di confronto:
WITH bar AS (
SELECT array_agg(b) AS bs
FROM foo
WHERE c < 3
)
SELECT a
FROM foo
WHERE b = ANY ( SELECT unnest(bs) FROM bar);
Ciò si traduce nell'output:
A
2
3
Dato il documento per la funzione ANY :
... l'errore ha senso, poiché l'espressione a sinistra è un integer -- colonna b -- mentre l'espressione di destra è un array di integer s o integer[] , e quindi il confronto finisce per essere nella forma integer =integer[] , che non ha un operatore e quindi genera l'errore.
unnest inserendo il integer[] value rende le espressioni di sinistra e di destra integer s, e così il confronto può continuare.
Modificato SQL Fiddle .
Nota: che lo stesso comportamento si verifica quando si utilizza IN invece di = ANY .