Tag: jsonb

怎么逃避? (问号)运算符在Rails中查询Postgresql JSONB类型

我正在使用Rails 4.2和Postgres 9.4来试用新的JSONB数据类型。 我的数据库中的一个JSONB列包含一个数组,我希望能够查询此数组包含特定值的记录。 我想出了如何使用新的JSONB“问号”(“包含”)运算符来完成此操作,如下所示: http : //www.postgresql.org/docs/9.4/static/functions-json.html 所以在原始SQL中我可以像在这个例子中那样工作: SELECT * FROM people WHERE roles ? ‘32486d83-4a38-42ba-afdb-f77ca40ea1fc’; 但我无法通过ActiveRecord看到从Rails中进行此查询的任何方法。 我尝试使用“where”方法进行原始查询,如下所示: Person.where(“roles ? ?”, “32486d83-4a38-42ba-afdb-f77ca40ea1fc”) 但由于问号是用于替换参数的特殊字符,我收到此错误: ActiveRecord :: PreparedStatementInvalid:在:roles中错误的绑定变量数(1为2)? ? 我想我需要一种方法来逃避“?” 字符,因为我希望它从字面上通过。 我试过了 \? 和?? 没有运气。 任何帮助表示赞赏!

Rails ActiveRecord:如何在jsonb上使用带双引号的绑定变量

我有一个postgres jsonb查询如下: Blog.where(“upload_data @> ‘[ { \”name\”: \”#{name}\” }]'”) 哪个有效,但打破了构建,因为优秀的制动员指出了可能的SQL注入风险。 如果我使用绑定变量: Blog.where(“upload_data @> ‘[ { \”name\”: ? }]'”, name) 它创建一个SQL查询,如: WHERE upload_data @> ‘[ { “name”: ‘name’ }]’ 请注意单引号 – 这是一个无效的查询 如果我使用单引号,我得到: WHERE upload_data @> “[ { ‘name’: ‘name’ }]” 这是无效的 我尝试了一些其他的东西,但我想要的是绑定变量计算为双引号的字符串: WHERE upload_data @> ‘[ { “name”: “name” }]’ 或者一个不同的解决方案 – 除了让刹车手跳过文件。

在Rails Postgres中使用JSONB数据类型的查询

如何查询具有空的appointment_id的slot_details的日程表。 这是一个示例数据集: id: 98, consulting_location_doctor_id: 498, schedule_date: Thu, 15 Jan 2015 00:00:00 IST +05:30, slot_details: [{“end”=>”2015-01-15T15:00:00.000+00:00”, “start”=>”2015-01-15T14:30:00.000+00:00”, “title”=>” 2:30 pm to 3:00 pm”, appointment_id: “”}, {“end”=>”2015-01-15T15:30:00.000+00:00”, “start”=>”2015-01-15T15:00:00.000+00:00”, “title”=>” 3:00 pm to 3:30 pm”, appointment_id: “”}, {“end”=>”2015-01-15T16:00:00.000+00:00”, “start”=>”2015-01-15T15:30:00.000+00:00”, “title”=>” 3:30 pm to 4:00 pm”, appointment_id: “”}, {“end”=>”2015-01-15T16:30:00.000+00:00”, “start”=>”2015-01-15T16:00:00.000+00:00”, “title”=>” 4:00 pm to 4:30 pm”, appointment_id: “”}, […]

如何将ActiveRecord模型属性从json迁移到jsonb?

迁移应该是什么样的? 我想利用jsonb数组查询技术。

存储嵌套JSON的访问器

我有“组织”模型,它存储与组织相关的所有信息。 有一个名为“集成”的JSONB类型的字段,用于存储与组织具有的所有外部服务集成有关的信息。 如何使用商店访问者访问存储在嵌套JSON中的信息,例如: { “mailchimp”: {“api_key”:”vsvsvef”, “list_id”:”12345″}, “sendgrid” : {“username”:”msdvsv”, “password”:”123456″} } 我知道我可以使用这样的商店访问器访问mailchimp: store_accessor :integrations, :mailchimp 如何轻松访问mailchimp的api_key?

查询Rails中的Postgres JSON数组字段

我试图在Postgres数据库中查询某个值。 我在users表中有一个名为groups的字段,可以用以下任一方式表示: 1。 groups: {“data”=>[{“serie”=>5, “year”=>3, “specialization”=>”Matematica”, “management_id”=>1, “group_number”=>2}, {“serie”=>5, “year”=>3, “specialization”=>”Matematica”, “management_id”=>1, “group_number”=>2}]} 2。 groups: [{“serie”=>5, “year”=>3, “specialization”=>”Matematica”, “management_id”=>1, “group_number”=>2}, {“serie”=>5, “year”=>3, “specialization”=>”Matematica”, “management_id”=>1, “group_number”=>2}] 我对这两种陈述都很好。 但是,我似乎无法找到如何让所有使用serie 5的用户说出来。 我尝试了多个查询: @users = User.where(“groups ->> ‘data’ @> ?”, {serie: 5}) @users = User.where(“groups -> ‘data’ @> ‘?'”, {serie: 5}) @users = User.where(“groups ->> ‘data’ ->> ‘serie’ […]

使用jsonb数组的Rails(postgres)查询

我的产品模型有一个jsonb字段specs (我们使用ActiveRecord的store_accessor管理)。 我的许多产品的规格都有一个名为spec_options散列规范。 在此之前,此spec_option字段只是文本。 现在它需要是一个数组。 之前用于查询此字段的产品的范围是: scope :with_spec_options, ->(spec_options) { where(“‘#{spec_options}’::jsonb \? (specs->>’spec_option’)”) } Ruby等价物(只是为了帮助理解这是做什么): select{ |product| spec_options.include?(product.specs[‘spec_option’]) } ActiveRecord等价物(如果spec_option是常规列): where(spec_option: spec_options) 但是,既然specs[‘spec_options’]是一个数组,我不能这样做。 我想我需要使用postgres’ ?| jsonb运算符,但我无法弄清楚如何将此操作的右侧转换为正确的格式。 Ruby等价物: def self.with_spec_options(spec_options) all.select{|product| if product.specs[‘spec_options’].present? product.specs[‘spec_options’].any?{|option| spec_options.include?(option) } else false end } end 有人有想法?

查询包含JSON对象数组的jsonb列

我使用PostgreSQL 9.5和Rails 5.我想查询下面显示的jsonb列,它包含一个JSON对象数组,以返回包含{“kind”:”person”}所有JSON数组元素,并执行计数。 我使用的SQL显示在json数据下面。 运行查询只返回一个空数组。 我已经尝试了这里和这里建议的查询。 这就是我的jsonb数据: ‘[ {“kind”:”person”, “filter_term”:”56″,”selected_attr”:”customer”}, {“kind”:”email”, “filter_term”:”marketer”,”selected_attr”:”job_title”} ]’ 我想要一个sql查询返回: data ———————————————————————- ‘{“kind”:”person”, “filter_term”:”56″,”selected_attr”:”customer”}’ (1 row) 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并在其上循环以创建表单: data ———————————————————————- ‘[{“kind”:”person”, “filter_term”:”56″,”selected_attr”:”customer”}]’ (1 row) 我试过这个SQL查询: “SELECT * FROM \”segments\” WHERE (payload @> ‘[{\”kind\”:\”person\”}]’)” 我也试过这个查询: “SELECT payload FROM segments WHERE payload @> ‘[{\”kind\”:\”person\”}]’::jsonb;” 这是第三个查询: “SELECT * FROM segments s WHERE s.payload->’\”#{a}\”‘ @> ‘[{\”kind\”:\”person\”}]’;” […]