Pentaho DI
February 4, 2023

Pentaho DI. Call DB Procedure Step для PostgreSQL.

Не получается у меня никак использовать этот степ для вызова хранимой процедуры PostgreSQL. Для вызова пользовательской функции с аналогичным функционалом - получается. Продемонстрирую пошагово.

Проведем подготовительную работу.

Создадим табличку в базе PostgreSQL, в которую просто будем складывать данные из хранимого кода.

create table dbo.t1 (
id bigint null,
val1 bigint null,
cr_date timestamp default current_timestamp);

Создадим хранимую процедуру и пользовательскую функцию - они будут просто инсертить в нашу табличку 1 строку.

create or replace function dbo.uf_ins_2_t1 (p_id bigint default 17
, p_val1 bigint default 43) 
  returns void
language plpgsql as $
begin
  insert into dbo.t1 (id, val1) values (p_id, p_val1);
end;
$;
create or replace procedure dbo.sp_ins_2_t1 (p_id bigint default -17
, p_val1 bigint default -43) 
language plpgsql as $
begin
  insert into dbo.t1 (id, val1) values (p_id, p_val1);
end;
$;

Проверим работу.

--вызов ф-ии
do $
begin
  perform dbo.uf_ins_2_t1();
end;
$;
--проверим работу функции
select * from dbo.t1
/*id	val1	cr_date
17	43	2023-02-04 17:10:26.671*/
--вызов процедуры
do $
begin
  call dbo.sp_ins_2_t1(-6,11);
end;
$;
--проверим работу процедуры
select * from dbo.t1 order by cr_date desc
/*id	val1	cr_date
-6	11	2023-02-04 17:11:03.459
17	43	2023-02-04 17:10:26.671*/

Видим, оба программных объекта работают.

Отлично, пришло время сделать их вызов в Pentaho Data Integration. Создаём трансформацию, в которой первым степом передаём параметры в хранимый объект. (Кстати, степ Call DB Procedure не может быть первым степом в трансформации.)

Трансформация. Из степа Generate rows передаются параметры.

Второй степ - как раз вызов пользовательской функции dbo.uf_ins_2_t1, пикча ниже:

Степ Call DB Procedure.

Запускаем трансформацию, запуск успешен. Проверяем изменения в нашей табличке - всё ок.

Результат работы трансформации.

Попробуем проделать то же самое, вызывая хранимую процедуру.

Вызов процедуры.

Запускаем, и смотрим результаты. Результаты разочаровывают. Ну и сам текст ошибки смотрится слегка издевательски:

"2023/02/04 18:41:16 - Call DB procedure (SP).0 - ERROR (version 9.1.0.0-324, build 9.1.0.0-324 from 2020-09-07 05.09.05 by buildguy) : Because of an error, this step can't continue:
2023/02/04 18:41:16 - Call DB procedure (SP).0 - Unable to call procedure
2023/02/04 18:41:16 - Call DB procedure (SP).0 - ОШИБКА: dbo.sp_ins_2_t1() — процедура
Hint: Для вызова процедуры используйте CALL.
Position: 15"

Результаты запуска трансформации.

Такой вот кандибобер с этим степом. Могу лишь предположить, что оно разрабатывалось ещё до появления хранимых процедур в PostgreSQL. Как это проверить - увы, не знаю. В документации у меня даже этот степ не нашёлся, и как посмотреть в Jira https://jira.pentaho.com/secure/Dashboard.jspa баги и фичи Pentaho DI, - тоже не нашёл. Если есть какие-то советы, жду в комментах.