Speed up table_exists? for databases with a large number of tables

At New Relic, we have hundreds of thousands of tables, and our migrations took 30 minutes without this similar patch. This cuts it down to a more reasonable amount of time.

The rescue false part is ugly, but necessary as far as I can tell. I don't know of a cross-database statement you can make that will work without trapping errors.
This commit is contained in:
Jade Rubick
2011-12-05 10:32:56 -08:00
parent f6cc4fd7a2
commit 73a331c2ac

View File

@@ -23,7 +23,12 @@ module ActiveRecord
# === Example
# table_exists?(:developers)
def table_exists?(table_name)
tables.include?(table_name.to_s)
begin
select_value("SELECT 1 FROM #{table_name.to_s} where 1=0")
true
rescue
false
end
end
# Returns an array of indexes for the given table.