Ruby on rails 轨道&x2B;Postgres迁移-为什么我会收到错误“;PG::UndefinedFunction:错误:函数gen_random_uuid()不存在;?

Ruby on rails 轨道&x2B;Postgres迁移-为什么我会收到错误“;PG::UndefinedFunction:错误:函数gen_random_uuid()不存在;?,ruby-on-rails,postgresql,uuid,rails-migrations,Ruby On Rails,Postgresql,Uuid,Rails Migrations,我的一个Rails迁移使用uuid作为主键。Postgres扩展gen_random_uuid()应该可以解决这个问题,但是在安装相关扩展(uuid ossp)之后,我仍然会遇到错误。问题是,每次我在重置和迁移过程中删除数据库时,uuid ossp扩展都会被数据库吹走(例如,rake db:drop db:create db:migrate) 修复方法是创建一个迁移,该迁移在启用相关扩展的所有其他迁移之前运行。类似于(db/migrate/0\u enable\u extensions.rb):

我的一个Rails迁移使用uuid作为主键。Postgres扩展
gen_random_uuid()
应该可以解决这个问题,但是在安装相关扩展(
uuid ossp
)之后,我仍然会遇到错误。

问题是,每次我在重置和迁移过程中删除数据库时,
uuid ossp
扩展都会被数据库吹走(例如,
rake db:drop db:create db:migrate

修复方法是创建一个迁移,该迁移在启用相关扩展的所有其他迁移之前运行。类似于(
db/migrate/0\u enable\u extensions.rb
):

class EnableExtensions
边缘案例答案:

如上所述,添加支持扩展的迁移

如果您以前拥有
bigint
id,并且正在转换为
UUID
,则运行
rake db:reset db:migrate
对我来说失败。请确保按照上述说明运行
rake db:drop db:create db:migrate


如果在架构中找不到错误
环境数据
,请运行
bin/rails db:Environment:set rails\u ENV=development

将迁移名称更改为
0\u XXX
完成了以下操作:)
class EnableExtensions < ActiveRecord::Migration[5.1]
  def change
    enable_extension 'uuid-ossp'
    enable_extension 'pgcrypto'
  end
end