在 Rails 项目中同时保存 uuid_ossp 和 pgcrypto

Posted

技术标签:

【中文标题】在 Rails 项目中同时保存 uuid_ossp 和 pgcrypto【英文标题】:Keeping both uuid_ossp and pgcrypto in a rails project 【发布时间】:2018-03-24 16:46:53 【问题描述】:

我正在开发一个旧的 Rails 项目(rails 5),在旧的迁移中,他们使用 uuid_ossp 作为默认主键。

由于 Gemfile 没有指定 postgresql 版本,我现在使用更新版本 (9.4) 来创建项目。在 postgresql 9.4 中,uuid_ossp 被替换为 pgcrypto。因此当你创建一个新模型时,Rails 会报错no function gen_random_uuid()

我要问的是:

我是否应该让我的项目同时启用 uuid_ossp 用于旧迁移和 pgcrypto 用于新迁移? 还是应该将所有内容迁移到 pgcrypto 并将 postgresql 锁定到当前版本?

因为此时我所要做的就是在config/application.rb 中启用pgcrypto,并且一切都可以正常工作,而无需触摸、修改或锁定任何东西。

【问题讨论】:

【参考方案1】:

事实证明,最好保持现状。我没有尝试从uuid_ossp 迁移到pgcrypto,所以我不确定是否可以这样做,但有时最好的解决方案是什么都不做。

【讨论】:

以上是关于在 Rails 项目中同时保存 uuid_ossp 和 pgcrypto的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”中的语法错误

Rails - 如何在保存后刷新关联

如何在rails中保存包含另一个模型属性的模型?

使用 mongoid 在 rails 中保存带有嵌入对象/文档的对象

根据国家名称转换时区 rails 4

比较数组中的值并删除 Ruby/Rails 中不同的项目