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
。