diff --git a/LCS/PyCommon/postgres.py b/LCS/PyCommon/postgres.py index 5d69955236dffcfacade366fa4279a3d20cb1255..31ed16fecc2a1acc94c0547598811f094075f232 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