From 473c1f0184df0338c3272aafe06b58d234f46211 Mon Sep 17 00:00:00 2001 From: "Paul A. Jungwirth" Date: Thu, 1 Dec 2016 11:53:18 -0800 Subject: [PATCH] Fix race condition where two connections both try to create the new month's table --- lib/pg_audit_log/entry.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pg_audit_log/entry.rb b/lib/pg_audit_log/entry.rb index b36436e..f7c2b47 100644 --- a/lib/pg_audit_log/entry.rb +++ b/lib/pg_audit_log/entry.rb @@ -59,7 +59,11 @@ def install EXECUTE 'SELECT ($1 + INTERVAL ''1 MONTH'')' INTO month_end USING month_start; create_table_sql := 'CREATE TABLE ' || tablename || ' ( CHECK ( date(occurred_at) >= DATE ''' || month_start || ''' AND date(occurred_at) < DATE ''' || month_end || ''' ) ) INHERITS (#{self.table_name})'; - EXECUTE create_table_sql; + BEGIN + EXECUTE create_table_sql; + EXCEPTION WHEN duplicate_table THEN + -- do nothing + END; EXECUTE 'CREATE INDEX ' || tablename || '_occurred_at ON ' || tablename || ' (date(occurred_at))'; EXECUTE insert_sql USING NEW; RETURN NULL;