From 5cf2f192d0575b0ffc28c4a9a3d7700da286a37c Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Mon, 2 Nov 2020 07:42:44 +0100 Subject: [PATCH] TMSS-421: check for changed column, not whole row. --- LCS/PyCommon/postgres.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/LCS/PyCommon/postgres.py b/LCS/PyCommon/postgres.py index 5d69955236d..31ed16fecc2 100644 --- a/LCS/PyCommon/postgres.py +++ b/LCS/PyCommon/postgres.py @@ -60,6 +60,13 @@ def makePostgresNotificationQueries(schema, table, action, column_name='id'): elif action == 'DELETE': select_payload = '''SELECT '{"id": ' || CAST(OLD.id AS text) || '}' INTO payload;''' + if action == 'UPDATE': + begin_update_check = 'IF ROW(NEW.{what}) IS DISTINCT FROM ROW(OLD.{what}) THEN'.format(what='*' if column_name == 'id' else column_name) + end_update_check = 'END IF;' + else: + begin_update_check = '' + end_update_check = '' + function_sql = ''' CREATE OR REPLACE FUNCTION {schema}{function_name}() RETURNS TRIGGER AS $$ @@ -79,9 +86,9 @@ def makePostgresNotificationQueries(schema, table, action, column_name='id'): old_or_new=('OLD' if action == 'DELETE' else 'NEW') + '.' + column_name, value='OLD' if action == 'DELETE' else 'NEW', change_name=change_name.lower(), - begin_update_check='IF ROW(NEW.*) IS DISTINCT FROM ROW(OLD.*) THEN\n' if action == 'UPDATE' else '', + begin_update_check=begin_update_check, select_payload=select_payload, - end_update_check='\nEND IF;' if action == 'UPDATE' else '') + end_update_check=end_update_check) trigger_name = 'T_%s' % function_name -- GitLab