Com base na parte da mensagem de erro
operator does not exist: integer = integer[] , parece que o bs a coluna precisa ser unnest ed, a fim de obter o lado direito de volta para um integer então o operador de comparação pode ser encontrado: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);
Isso resulta na saída:
A
2
3
Dado o documento para a função ANY :
... o erro faz sentido, pois a expressão da esquerda é um
integer -- coluna b -- enquanto a expressão da direita é um array de integer s, ou integer[] , e assim a comparação acaba ficando no formato integer =integer[] , que não tem um operador e, portanto, resulta no erro. unnest ndo o integer[] value torna as expressões da mão esquerda e direita integer s, e assim a comparação pode continuar. Modificado SQL Fiddle .
Observação: que o mesmo comportamento é visto ao usar
IN em vez de = ANY .