x
1
DECLARE
2
query text;
3
BEGIN
4
with
5
event as (
6
select * from lizsync.logged_actions where event_id = pevent_id
7
)
8
-- get primary key names
9
, where_pks as (
10
select array_to_string(array_agg(uid_column || '=' || quote_literal(row_data->uid_column)), ' AND ') as where_clause
11
from lizsync.logged_relations r
12
join event on relation_name = (schema_name || '.' || table_name)
13
)
14
select into query
15
case
16
when action = 'I' then
17
'INSERT INTO ' || schema_name || '.' || table_name ||
18
' ('||(select string_agg(key, ',') from each(row_data))||') VALUES ' ||
19
'('||(select string_agg(case when value is null then 'null' else quote_literal(value) end, ',') from each(row_data))||')'
20
when action = 'D' then
21
'DELETE FROM ' || schema_name || '.' || table_name ||
22
' WHERE ' || where_clause
23
when action = 'U' then
24
'UPDATE ' || schema_name || '.' || table_name ||
25
' SET ' || (select string_agg(key || '=' || case when value is null then 'null' else quote_literal(value) end, ',') from each(changed_fields)) ||
26
' WHERE ' || where_clause
27
end
28
from
29
event, where_pks
30
;
31
32
execute query;
33
END;
34