mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 01:03:41 +08:00
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.
This commit is contained in:
@ -219,24 +219,28 @@ class ImportScripts::Base
|
|||||||
def all_records_exist?(type, import_ids)
|
def all_records_exist?(type, import_ids)
|
||||||
return false if import_ids.empty?
|
return false if import_ids.empty?
|
||||||
|
|
||||||
connection = ActiveRecord::Base.connection.raw_connection
|
ActiveRecord::Base.transaction do
|
||||||
connection.exec('CREATE TEMP TABLE import_ids(val text PRIMARY KEY)')
|
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 = "#{type.to_s.classify}CustomField".constantize
|
||||||
existing = existing.where(name: 'import_id')
|
existing = existing.where(name: 'import_id')
|
||||||
.joins('JOIN import_ids ON val = value')
|
.joins('JOIN import_ids ON val = value')
|
||||||
.count
|
.count
|
||||||
|
|
||||||
if existing == import_ids.length
|
if existing == import_ids.length
|
||||||
puts "Skipping #{import_ids.length} already imported #{type}"
|
puts "Skipping #{import_ids.length} already imported #{type}"
|
||||||
true
|
true
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
connection.exec('DROP TABLE import_ids') unless connection.nil?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
ensure
|
|
||||||
connection.exec('DROP TABLE import_ids') unless connection.nil?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def created_user(user)
|
def created_user(user)
|
||||||
|
Reference in New Issue
Block a user