Según la parte del mensaje de error, el operador operator does not exist: integer = integer[] , parece que bs la columna debe ser unnest ed, para que el lado derecho vuelva a ser un integer por lo que se puede encontrar el operador de comparación:
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);
Esto da como resultado la salida:
A
2
3
Dado el documento para CUALQUIER función :
... el error tiene sentido, ya que la expresión de la izquierda es un integer -- columna b -- mientras que la expresión de la derecha es una matriz de integer s, o integer[] , por lo que la comparación termina siendo de la forma integer =integer[] , que no tiene un operador y, por lo tanto, genera el error.
unnest ing el integer[] value hace que las expresiones de la mano izquierda y derecha sean integer s, y así la comparación puede continuar.
Modificado SQL Fiddle .
IN en lugar de = ANY .