Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e6cf5bb

Browse files
authoredSep 9, 2019
Create scorecard_trigger_function.sql
1 parent 90ecbeb commit e6cf5bb

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
 

‎scorecard_trigger_function.sql

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
SET search_path TO tcs_catalog;
2+
3+
CREATE OR REPLACE FUNCTION "tcs_catalog"."notify_trigger" () RETURNS trigger
4+
VOLATILE
5+
AS $body$
6+
DECLARE
7+
rec RECORD;
8+
payload TEXT;
9+
column_name TEXT;
10+
column_value TEXT;
11+
payload_items TEXT[];
12+
uniquecolumn TEXT;
13+
BEGIN
14+
-- Set record row depending on operation
15+
CASE TG_OP
16+
WHEN 'INSERT', 'UPDATE' THEN
17+
rec := NEW;
18+
WHEN 'DELETE' THEN
19+
rec := OLD;
20+
ELSE
21+
RAISE EXCEPTION 'Unknown TG_OP: "%". Should not occur!', TG_OP;
22+
END CASE;
23+
24+
-- Get required fields
25+
FOREACH column_name IN ARRAY TG_ARGV LOOP
26+
EXECUTE format('SELECT $1.%I::TEXT', column_name)
27+
INTO column_value
28+
USING rec;
29+
payload_items := array_append(payload_items, '"' || replace(column_name, '"', '\"') || '":"' || replace(column_value, '"', '\"') || '"');
30+
END LOOP;
31+
32+
uniquecolumn := (SELECT c.column_name
33+
FROM information_schema.key_column_usage AS c
34+
LEFT JOIN information_schema.table_constraints AS t
35+
ON t.constraint_name = c.constraint_name
36+
WHERE t.table_name = TG_TABLE_NAME AND t.constraint_type = 'PRIMARY KEY');
37+
38+
-- Build the payload
39+
payload := ''
40+
|| '{'
41+
|| '"topic":"' || 'db.postgres.sync' || '",'
42+
|| '"originator":"' || 'tc-postgres-delta-processor' || '",'
43+
|| '"timestamp":"' || '2019-08-19T08:39:48.959Z' || '",'
44+
|| '"mime-type":"' || 'application/json' || '",'
45+
|| '"payload": {'
46+
47+
|| '"Uniquecolumn":"' || uniquecolumn || '",'
48+
|| '"operation":"' || TG_OP || '",'
49+
|| '"schema":"' || TG_TABLE_SCHEMA || '",'
50+
|| '"table":"' || TG_TABLE_NAME || '",'
51+
|| '"data": {' || array_to_string(payload_items, ',') || '}'
52+
|| '}}';
53+
54+
-- Notify the channel
55+
PERFORM pg_notify('db_notifications', payload);
56+
57+
RETURN rec;
58+
END;
59+
$body$ LANGUAGE plpgsql
60+
61+
62+
CREATE TRIGGER "scorecard_trigger"
63+
AFTER INSERT OR DELETE OR UPDATE ON scorecard
64+
FOR EACH ROW
65+
EXECUTE PROCEDURE notify_trigger('scorecard_id', 'scorecard_status_id', 'scorecard_type_id', 'project_category_id', 'name', 'version', 'min_score', 'max_score', 'create_user', 'create_date', 'modify_user', 'modify_date', 'version_number');
66+
67+
CREATE TRIGGER "scorecard_group_trigger"
68+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_group
69+
FOR EACH ROW
70+
EXECUTE PROCEDURE notify_trigger('scorecard_group_id','scorecard_id','name','weight','sort','create_user','create_date','modify_user' ,'modify_date','version');
71+
72+
CREATE TRIGGER "scorecard_question_trigger"
73+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_question
74+
FOR EACH ROW
75+
EXECUTE PROCEDURE notify_trigger('project_status_id', 'name', 'description', 'create_user', 'create_date', 'modify_user', 'modify_date');
76+
77+
78+
CREATE TRIGGER "scorecard_section_trigger"
79+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_section
80+
FOR EACH ROW
81+
EXECUTE PROCEDURE notify_trigger('scorecard_section_id','scorecard_group_id','name','weight','sort','create_user','create_date','modify_user' ,'modify_date','version');
82+
83+
84+
CREATE TRIGGER "scorecard_question_type_lu_trigger"
85+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_question_type_lu
86+
FOR EACH ROW
87+
EXECUTE PROCEDURE notify_trigger('scorecard_question_id','scorecard_question_type_id','scorecard_section_id','description','guideline', 'weight','sort','upload_document','upload_document_required','create_user','create_date','modify_user' ,'modify_date','version');
88+
89+
90+
CREATE TRIGGER "scorecard_status_lu_trigger"
91+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_status_lu
92+
FOR EACH ROW
93+
EXECUTE PROCEDURE notify_trigger('scorecard_status_id', 'name', 'description', 'create_user', 'create_date', 'modify_user', 'modify_date','version');
94+
95+
CREATE TRIGGER "scorecard_type_lu_trigger"
96+
AFTER INSERT OR DELETE OR UPDATE ON scorecard_type_lu
97+
FOR EACH ROW
98+
EXECUTE PROCEDURE notify_trigger('scorecard_type_id', 'name', 'description', 'create_user', 'create_date', 'modify_user', 'modify_date','version');

0 commit comments

Comments
 (0)
Please sign in to comment.