在postgresql json字段中选择键的唯一值

在postgresql json字段中选择键的唯一值,sql,ruby-on-rails,json,ruby,postgresql,Sql,Ruby On Rails,Json,Ruby,Postgresql,我有以下型号: Shipment: reference_numbers: [] :json field 参考字段的总体结构如下所示: [{'reference_field_name': 'freight_number', 'reference_field_value': '0098'}, {'reference_field_name': 'bill_of_lading', 'reference_field_value': '1190' }] 在这里,字段名称可能因交付而异。它可以是任何东

我有以下型号:

Shipment:
  reference_numbers: [] :json field
参考字段的总体结构如下所示:

[{'reference_field_name': 'freight_number', 'reference_field_value': '0098'}, {'reference_field_name': 'bill_of_lading', 'reference_field_value': '1190' }]
在这里,字段名称可能因交付而异。它可以是任何东西,而不仅仅是提单和货运编号


在不同装运的参考号中查找“reference\u field\u name”的所有唯一值的最佳方法是什么?

我知道,现在回答有点晚,但对于有类似任务的数千人来说,有一些很酷的postgresql功能:)

首先,让我们将参考_编号取消到表中:

select jsonb_array_elements("reference_numbers") as fields from shipment
这将返回一个包含一列的行集,每行将包含来自所有引用号数组的一项。所以,如果您有两个装运行,并且每个行在reference_number字段中有两个项目,那么此查询将返回4个项目

其次,让我们选择不同的字段:

with fields_rowset as (
    select 
        jsonb_array_elements("reference_numbers") as fields 
    from shipment
)
select DISTINCT fields->'reference_field_name' from fields_rowset

注意,我使用了jsonb_*函数,但如果您有json字段,则必须使用json_*替换

您是否正在寻找一个查询来执行此操作?我认为这不能在activerecord中完成。您必须启动一个sql查询。另一个选择是在ruby中执行,这可能会慢一些。@Joel_Blum是的,sql查询。我试图让它工作,但始终没有得到答案