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);

... и проблема была решена. Я знаю, что это похоже на большую работу, но выгоды того стоят.

Другие вопросы по тегам