|
| 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