ruby-on-rails - 我应该在迁移中将 jsonb 默认为 '{}' 还是 {}

标签 ruby-on-rails postgresql ruby-on-rails-5 jsonb

属于the scarce instructions我读过有关在迁移中添加 Postgres 的数据类型 jsonb 的内容,它看起来像这样:

create_table :ref_check_ins do |t|
  t.jsonb :document, null: false, default: '{}'
  t.index :document, using: :gin
end

但是否有任何理由反对默认使用 Hash 而不是 String,即 {} 而不是 '{}'

定义为String类型时,该列的类:

String < Object

定义为Hash类型时,该列的类:

Hash

最佳答案

在迁移文件中,您将要使用 {}'{}'

我确实为此苦苦挣扎了一段时间,问题是我认为 PG 适配器隐含地知道如何将散列转换为 jsonb 对象。它不像 postgres 数据库中的 json 类型,您在其中存储 json 对象的字符串值,而是实际的二进制对象(在 jsonb 中)。我可能可以在 Rails 4.2 发布代码的某个地方挖掘它,但是,如果你正在寻找它的薄文档(我将在不久的将来添加),这里的关键是你'当你执行 '{}' 时,实际上是从 Postgres 取回一个字符串,因此当你尝试 indifferent_access 它时,它失败了,因为字符串不能有 indifferent使用权。这可能是我第一次意识到他们提供的信息存在一些问题。

老实说,无论如何我都不直接使用 {},我更喜欢 [] 而不是 {},因为通常我在处理非常具体的日志记录功能我想在一条记录上显式记录,而不必将两个大表连接在一起。这是我在 5.0 上的特殊用例,如果您 <5 岁,情况可能会有所不同,但可能相差不大。

关于ruby-on-rails - 我应该在迁移中将 jsonb 默认为 '{}' 还是 {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616292/

相关文章:

ruby-on-rails-4 - PG::ConnectionBad:将 rails 从 4.2 升级到 5.2 后连接关闭

ruby-on-rails - 为什么 Rails 5 随机排序测试用例?

ruby-on-rails - Rails 描述 HTML 内容源

ruby-on-rails - 如何开始测试 Rails 应用程序?

ruby-on-rails - 抽象类和子类的最佳ActiveRecord继承策略

node.js - 使用 sequelize 复制外键列

ruby-on-rails - 如何判断sidekiq是否连接到redis服务器?

mysql - 如何查找在 PostgreSQL 和 MySQL 中运行查询的 CPU 和 RAM 使用情况

postgresql - 如何测试crontab入口?

ruby-on-rails - Rails 5.2:ActiveRecord::RecordInvalid(声称用户名已被占用,但事实并非如此)