FIX: Importing with pgbouncer failed

FIX: Importing with pgbouncer failed

Checking if all records have been imported uses a temp table in PostgreSQL. This fails when pgbouncer is used unless the temp table is created inside a transaction.

diff --git a/script/import_scripts/base.rb b/script/import_scripts/base.rb
index 4e7ca2a..ea43db2 100644
--- a/script/import_scripts/base.rb
+++ b/script/import_scripts/base.rb
@@ -219,24 +219,28 @@ class ImportScripts::Base
   def all_records_exist?(type, import_ids)
     return false if import_ids.empty?
 
-    connection = ActiveRecord::Base.connection.raw_connection
-    connection.exec('CREATE TEMP TABLE import_ids(val text PRIMARY KEY)')
+    ActiveRecord::Base.transaction do
+      begin
+        connection = ActiveRecord::Base.connection.raw_connection
+        connection.exec('CREATE TEMP TABLE import_ids(val text PRIMARY KEY)')
 
-    import_id_clause = import_ids.map { |id| "('#{PG::Connection.escape_string(id.to_s)}')" }.join(",")
+        import_id_clause = import_ids.map { |id| "('#{PG::Connection.escape_string(id.to_s)}')" }.join(",")
 
-    connection.exec("INSERT INTO import_ids VALUES #{import_id_clause}")
+        connection.exec("INSERT INTO import_ids VALUES #{import_id_clause}")
 
-    existing = "#{type.to_s.classify}CustomField".constantize
-    existing = existing.where(name: 'import_id')
-      .joins('JOIN import_ids ON val = value')
-      .count
+        existing = "#{type.to_s.classify}CustomField".constantize
+        existing = existing.where(name: 'import_id')
+          .joins('JOIN import_ids ON val = value')
+          .count
 
-    if existing == import_ids.length
-      puts "Skipping #{import_ids.length} already imported #{type}"
-      true
+        if existing == import_ids.length
+          puts "Skipping #{import_ids.length} already imported #{type}"
+          true
+        end
+      ensure
+        connection.exec('DROP TABLE import_ids') unless connection.nil?
+      end
     end
-  ensure
-    connection.exec('DROP TABLE import_ids') unless connection.nil?
   end
 
   def created_user(user)

GitHub sha: d216483c