Динамический запрос в 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. Вопрос: где ошибка в исходном варианте и что надо исправить?