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

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

问题在于,每次我将数据库作为重置和迁移的一部分而丢弃数据库时, 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 

边缘案例答案:

如上所述,添加启用扩展的迁移。

如果你之前有过bigint id并且你正在转换为UUID ,那么运行rake db:reset db:migrate失败了。 一定要运行rake db:drop db:create db:migrate ,如上所述!

如果Environment data not found in the schema错误Environment data not found in the schema ,请运行bin/rails db:environment:set RAILS_ENV=development