我应该在迁移中将jsonb默认为"{}"还是{}

Fel*_*ger 10 postgresql ruby-on-rails jsonb ruby-on-rails-5

在我阅读的关于在迁移中添加Postgres数据类型的稀缺指令jsonb中,它看起来像这样:

create_table :ref_check_ins do |t|
  t.jsonb :document, null: false, default: '{}'
  t.index :document, using: :gin
end
Run Code Online (Sandbox Code Playgroud)

但有没有理由反对默认为字符串的Hash intead,即{}而不是'{}'

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

String < Object
Run Code Online (Sandbox Code Playgroud)

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

Hash
Run Code Online (Sandbox Code Playgroud)

Ful*_*ite 9

在迁移文件,你将要使用的{}VS '{}'.

我真的只是苦苦挣扎了一段时间,事情就是我认为PG适配器隐含地知道如何将哈希转换为jsonb对象.它不像postgres DB中的json类型,你在那里存储一个json对象的字符串值,而是一个实际的二进制对象(在jsonb中).我可以在某个地方的Rails 4.2发布代码中挖掘它,但是,如果你正在查看它上面的精简文档(我将在不久的将来添加它),那么关键在于你'当你这样做时'{}',实际上从Postgres获得一个字符串,因此当你尝试indifferent_access它时,它会失败,因为一个字符串不能有无关紧要的访问权限.这可能是我第一次抬头,他们提供的信息存在一些问题.

老实说,我不使用直线上升{},无论如何,有利于[]{},因为平时我处理非常具体的日志记录功能我想明确的记录,而不必连接两个大表连接在一起.这是我在5.0上的特殊用例,如果你<5,可能会有点不同,但可能不是很多.