Greenplum: функции, которые выполняют операторы SQL из segDB, еще не поддерживаются
Я получаю эту ошибку, когда пытаюсь вызвать функцию из набора Вставить триггер на одной из моих таблиц в выпуске SNE GP:
ERROR: Functions that execute SQL statements from the segDBs are not yet supported (spi.c:203) (seg0 localhost:50001 pid=5504)
DETAIL:
SQL statement "SELECT DISTINCT min(zasn) FROM zeusasn WHERE zasn IN (SELECT asn FROM asntable where ip >>= '10.29.249.121')"
PL/pgSQL function "eptriggerfn" line 5 at SQL statement
********** Error **********
ERROR: Functions that execute SQL statements from the segDBs are not yet supported (spi.c:203) (seg0 localhost:50001 pid=5504)
SQL state: XX000
Detail:
SQL statement "SELECT DISTINCT min(zasn) FROM zeusasn WHERE zasn IN (SELECT asn FROM asntable where ip >>= '10.29.249.121')"
PL/pgSQL function "eptriggerfn" line 5 at SQL statement
Что может быть причиной этого? Триггеры + функции отлично работают с другой таблицей в той же БД.
Заранее спасибо!
Ргдс, Киран
1 ответ
Поскольку 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);
... и проблема была решена. Я знаю, что это похоже на большую работу, но выгоды того стоят.