我的一个Rails迁移使用uuid作为主键。 Postgres扩展程序gen_random_uuid()
应解决此问题,但在安装相关扩展程序(uuid-ossp
)后仍然出现错误。
答案 0 :(得分:23)
问题是,每次我在重置和迁移过程中删除数据库时,uuid-ossp
扩展都会被数据库吹走(例如rake db:drop db:create db:migrate
)。
修复方法是创建一个迁移,该迁移在启用相关扩展的所有其他迁移之前运行。像这样(db/migrate/0_enable_extensions.rb
):
class EnableExtensions < ActiveRecord::Migration[5.1]
def change
enable_extension 'uuid-ossp'
enable_extension 'pgcrypto'
end
end
答案 1 :(得分:0)
边缘案例答案:
添加支持上述扩展功能的迁移。
如果您以前有bigint
个ID,并且要转换为UUID
,那么对我来说运行rake db:reset db:migrate
会失败。确保如上所述运行rake db:drop db:create db:migrate
!
如果收到错误Environment data not found in the schema
,请运行bin/rails db:environment:set RAILS_ENV=development
。