Heroku Postgres迁移中enable_extension与create_table的schema_search_path不一致问题
解决Heroku Postgres扩展在heroku_ext schema下的uuid函数调用问题
强制迁移全程使用指定schema路径
在迁移文件最开头加一行执行语句,把schema搜索路径固定为heroku_ext, public,避免Heroku在执行create_table时自动重置:execute "SET schema_search_path TO heroku_ext, public;"把这行放在
enable_extension和create_table之前,确保整个迁移流程里Postgres都能找到两个schema里的对象。优化enable_extension的重写逻辑
之前的重写可能只在安装扩展时临时改路径,要让路径变更持续生效:def enable_extension(name) super # 修改数据库默认路径 execute "ALTER DATABASE #{connection.current_database} SET schema_search_path TO heroku_ext, public;" # 同步更新ActiveRecord连接的当前路径 connection.schema_search_path = "heroku_ext, public" end这样后续的create_table操作会继承这个路径设置,不会再变回只搜public。
直接指定函数的schema前缀
如果上面两种方法都没解决,就直接在create_table里给uuid函数加上schema前缀,硬编码路径:create_table :your_table, id: :uuid do |t| t.uuid :some_column, default: -> { "heroku_ext.uuid_generate_v4()" } # 其他字段定义 end这种方式最稳妥,不管搜索路径怎么变,都能精准定位到函数。
内容的提问来源于stack exchange,提问作者James Woodrow
相关产品推荐
相关产品推荐

