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();