Greenplum: функции, которые выполняют операторы SQL из segDB, еще не поддерживаются - PullRequest
2 голосов
/ 03 января 2011

Я получаю эту ошибку, когда пытаюсь вызвать функцию из набора Вставить триггер на одной из моих таблиц в выпуске 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

Что может быть причиной этого?Триггеры + функции отлично работают с другой таблицей в той же БД.

Заранее спасибо!

Rgds, Kiran

1 Ответ

3 голосов
/ 09 марта 2011

Поскольку 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);

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

...