ruby-on-rails – 在Rails <4中设置Postgres JSON列的默认值
发布时间:2020-12-16 19:47:50 所属栏目:百科 来源:网络整理
导读:所以我开始使用Postgres JSON数据类型,现在是 there’s a lot of fun stuff you can do with it. 在我的Rails应用程序之一还没有Rails 4(其中 support for Postgres JSON has been added)中,我添加了一个JSON列: create_table :foo do |t| t.column :bar,:j
所以我开始使用Postgres
JSON数据类型,现在是
there’s a lot of fun stuff you can do with it.
在我的Rails应用程序之一还没有Rails 4(其中 support for Postgres JSON has been added)中,我添加了一个JSON列: create_table :foo do |t| t.column :bar,:json end 但是我不知道如何设置列的默认值. 解决方法
虽然有点晚,这对我来说(需要Postgres> = 9.3):
create_table :foo do |t| t.column :bar,:json end execute "ALTER TABLE foo ALTER COLUMN bar SET DEFAULT '[]'::JSON" 编辑:这个答案用于倡导to_json(‘[]’:: text)而不是'[]’:: JSON – 感谢@Offirmo的提示. 旧方法的问题是它并没有将数组或对象实际上定义为默认值,而是一个看起来像一个的标量(字符串).为什么这么重要? Postgres允许将三种值插入到JSON列中: >对象 INSERT INTO foo(bar)VALUE(‘{}’) INSERT INTO foo(bar)VALUE(‘[]’) INSERT INTO foo(bar)VALUE(‘“string”’) 问题是,如果您在同一列中混合使用这三种,您将无法使用JSON运算符.如果使用先前倡导的方法设置默认值为'[]’,并查询数组元素,遇到具有标量默认值的单个行将中止整个查询,并显示错误: =# SELECT * FROM foo WHERE bar->>1 = 'baz'; ERROR: cannot extract element from a scalar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |