lib/rubyrep/replication_extenders/postgresql_replication.rb in rubyrep-1.1.2 vs lib/rubyrep/replication_extenders/postgresql_replication.rb in rubyrep-1.2.0

- old
+ new

@@ -43,25 +43,38 @@ end activity_check = "" if params[:exclude_rr_activity] then activity_check = <<-end_sql - PERFORM ACTIVE FROM #{params[:activity_table]}; + PERFORM ACTIVE FROM #{schema_prefix}#{params[:activity_table]}; IF FOUND THEN RETURN NULL; END IF; end_sql end + version_string = select_value("select version();") + version = version_string.gsub(/^\s*postgresql\s*([0-9.]+).*$/i, '\1') + if version >= '8.4' + modification_check = <<-end_sql + IF NEW IS NOT DISTINCT FROM OLD THEN + RETURN NULL; + END IF; + end_sql + else + modification_check = "" + end + # now create the trigger execute(<<-end_sql) CREATE OR REPLACE FUNCTION "#{params[:trigger_name]}"() RETURNS TRIGGER AS $change_trigger$ BEGIN #{activity_check} IF (TG_OP = 'DELETE') THEN INSERT INTO #{schema_prefix}#{params[:log_table]}(change_table, change_key, change_type, change_time) SELECT '#{params[:table]}', #{key_clause('OLD', params)}, 'D', now(); ELSIF (TG_OP = 'UPDATE') THEN + #{modification_check} INSERT INTO #{schema_prefix}#{params[:log_table]}(change_table, change_key, change_new_key, change_type, change_time) SELECT '#{params[:table]}', #{key_clause('OLD', params)}, #{key_clause('NEW', params)}, 'U', now(); ELSIF (TG_OP = 'INSERT') THEN INSERT INTO #{schema_prefix}#{params[:log_table]}(change_table, change_key, change_type, change_time) SELECT '#{params[:table]}', #{key_clause('NEW', params)}, 'I', now();