Ruby on rails 基于在postgres中存储为文本的rails哈希的查询

Ruby on rails 基于在postgres中存储为文本的rails哈希的查询,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我在postgres中有一个带有文本列的表。此列由带有哈希对象的rails填充。这是列值的外观: --- :key1: - value1 - value2 - value3 :key2: - value4 :key3: - value5 - value6 我需要能够根据一个哈希值查询表。我尝试将其转换为json/jsonb对象,但出现以下错误: [22P02] ERROR: invalid input syntax for type json Detail: Token "-" is inva

我在postgres中有一个带有文本列的表。此列由带有哈希对象的rails填充。这是列值的外观:

---
:key1:
- value1
- value2
- value3
:key2:
- value4
:key3:
- value5
- value6
我需要能够根据一个哈希值查询表。我尝试将其转换为json/jsonb对象,但出现以下错误:

[22P02] ERROR: invalid input syntax for type json Detail: Token "-" is invalid.
如果我将对象加载回Rails,那么字段是散列就可以了。但是,基于字段将内存中的所有对象加载到查询中是不实际的。 有没有办法将此字段转换为json或易于查询的格式? 这是Rails中字段的外观:

{
  :key1 => [
    "value1",
    "value2",
    "value3"
  ],
  :key2 => [
    "value4"
  ],
  :key3 => [
    "value5",
    "value6"
  ]
}

这就是YAML,它表明您正在使用
序列化
。将列的类型更改为
jsonb
,可行性如何?这意味着添加一个新的
jsonb
列,在Ruby中解压每个列以获得散列,然后将散列发送回数据库,删除原始
text
列,并重命名新的
jsonb
列。如果你能做到这一点,那么你可以使用健全的查询,否则你必须尝试在YAML内部查询,这将是一个混乱,最终会崩溃。而你在考虑如果你真的想使用JSONB首先。如果数据有任何类型的结构,那么就使用一个更容易正确查询的表,并为数据提供某种完整性。如果确实必须这样做,那么可以使用包括Ruby在内的任意多种语言。因此,在本例中,您可以要求psych并使用它解析YAML并返回JSON。但要纠正一个糟糕的设计决策似乎需要付出巨大的努力。@muistooshort感谢我将列类型更改为jsonb,并且它可以正常工作。