Ruby on rails 轨道&x2B;Postgres迁移-为什么我会收到错误“;PG::UndefinedFunction:错误:函数gen_random_uuid()不存在;?
我的一个Rails迁移使用uuid作为主键。Postgres扩展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):
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