我正在使用Rails 4.2.7。我想创建一个支持扩展的迁移,但前提是该扩展在运行我的主机环境中不存在。我创造了
class EnableUuidOsspExtension < ActiveRecord::Migration
def change
enable_extension 'uuid-ossp'
end
end
但我想禁止启用扩展(如果已启用)。如何调整上述迁移以实现此目标?这样做的动机是因为我必须在本地计算机上运行该程序才能将其添加到PostGres,但是如果我迁移到Heroku,此扩展程序可能已经存在,但是我不希望在运行数据库迁移时崩溃脚本。
最佳答案
有一个extensions
方法可返回扩展名数组,因此您可以执行以下操作:
def up
enable_extension('uuid-ossp') unless extensions.include?('uuid-ossp')
end
def down
disable_extension('uuid-ossp') if extensions.include?('uuid-ossp')
end
您也可以在可以访问
create extension if not exists
的SQL中手动完成此操作:def up
connection.execute('create extension if not exists "uuid-ossp"')
end