Поскольку Greenplum выполняет распределенную обработку по нескольким узлам, запрос в запросе не может использовать возможности полной обработки, поэтому он не поддерживается.
Когда мы сделали переключение, у нас была похожая проблема:
select *,
country_name(country_id)
from sales
where country_id in (224, 105);
Функция country_name()
в основном делала подзапрос для каждого идентификатора, чтобы получить название страны. Поэтому нам пришлось изменить запрос на:
select *,
c.country_name
from sales
left join country as c using (country_id)
where country_id in (224, 105);
... и проблема была решена. Я знаю, что это похоже на большую работу, но выгоды того стоят.