gpt4 book ai didi

json - 如何从 postgres JSONB 列获取值?

转载 作者:行者123 更新时间:2023-11-29 11:44:22 25 4
gpt4 key购买 nike

我有 PostgreSQL 10.5 数据库和 Rails 5 应用程序。

我的模型:

# == Schema Information
#
# Table name: property_keys
#
# id :integer not null, primary key
# name :string
# created_at :datetime not null
# updated_at :datetime not null
# i18n_name :jsonb
#

class PropertyKey < ApplicationRecord
# Fields
store :i18n_name, accessors: I18n.available_locales, coder: JSON
end

我的迁移:

class LocalizeProperties < ActiveRecord::Migration[5.2]
def up
add_column :property_keys, :i18n_name, :jsonb

PropertyKey.all.each do |property_key|
[:en, :de, :ru].each do |locale_key|
property_key.i18n_name[locale_key] = property_key.name
end

property_key.save!
end
end

def down
remove_column :property_keys, :i18n_name
end
end

表名:property_keys .字段列表:

  • id: bigint
  • i18n_name: jsonb

这是对所有数据的请求:

enter image description here

我想获取所有英文名称("en" 键在 i18n_name 列中的值)。

这是一个请求:

SELECT
id,
i18n_name,
i18n_name->'en' AS en
FROM property_keys;

它什么也不返回。

但理论上应该返回填充了“en”列的数据。

截图如下:

enter image description here

我还尝试使用 ->> 进行查询但它没有用:

enter image description here

我应该如何更改我的请求以及哪个PostgreSQL operators我应该使用它来让它工作吗?

检查 JSONB 列的长度:

enter image description here

最佳答案

->->> 运算符按预期方式工作,通过键或在后一种情况下作为文本检索 json 对象。

我怀疑你遇到的真正问题是你看到的数据并不是真正存储在你的表中的数据,这就是为什么 i18_name->'en' 不会工作,因为没有 key en

为了能够确认我的写作,请运行以下查询以查看您在字符串中看到的内容的长度与存储在表中的内容是否匹配。他们可能不会:

select
length(i18n_name::text) AS stored,
length('{"en":"asdasdadad","de":"asdasdadad","ru":"asdasdadad"}') AS whatisee

你能用它做什么?使用 bytea 数据类型转换调查数据,或者简单地UPDATE 该列中包含正确(您所看到的)数据的行。

这将使运算符带来您实际期望的结果,因为在 jsonb 字段中会有 en 键。

关于json - 如何从 postgres JSONB 列获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com