Динамический запрос в postgresql, продолжение

В продолжение предыдущей темы: В функции для триггера на удаление строки (FOR EACH ROW on DELETE) выполняю такую команду

EXECUTE 'INSERT INTO au.log_col_data (parent_id, col, value) SELECT $1, col, $3.name FROM au.log_col WHERE tbl = $2 and flags & 9 = 0 and $3.name IS NOT NULL' USING _lid_, _tbl_, OLD;

и получаю результат:

select * from au.log_col_data;
 parent_id | col |                        value
-----------+-----+------------------------------------------------------
     51601 | 102 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 103 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 104 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 105 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 106 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 107 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 108 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 109 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)
     51601 | 110 | (1,11.06.2023,200,38627,0,1,Комм,38627,11.06.2023,t)

т.е. в во все строки таблицы записано перечисление значений удаленной строки таблицы.

Когда то же самое делаю построчно (в цикле по строкам таблицы au.log_col), все получается правильно:

select * from au.log_col_data;
 parent_id | col |   value
-----------+-----+------------
     51597 | 102 | 11.06.2023
     51597 | 103 | 200
     51597 | 104 | 38627
     51597 | 105 | 0
     51597 | 106 | 1
     51597 | 107 | Комм
     51597 | 108 | 38627
     51597 | 109 | 11.06.2023
     51597 | 110 | true

В крайнем случае придется остановиться на этом варианте, но из соображений эффективности хотелось бы сделать одним EXECUTE. Вопрос: где ошибка в исходном варианте и что надо исправить?


Ответы (0 шт):