Rails + Postgres迁移 - 为什么我收到错误“PG :: UndefinedFunction:ERROR:function gen_random_uuid()不存在”?

时间:2017-11-01 21:38:01

标签: ruby-on-rails postgresql uuid rails-migrations

我的一个Rails迁移使用uuid作为主键。 Postgres扩展程序gen_random_uuid()应解决此问题,但在安装相关扩展程序(uuid-ossp)后仍然出现错误。

2 个答案:

答案 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