我有一个数组类型要存储在 Postgres 中。我的主要用例之一是查看是否有任何记录有一个包含字符串的数组。
例如。
| A | ["NY", "Paris", "Milan"] |
| B | ["Paris", "NY"] |
| C | [] |
| D | ["Milan"] |
数组中是否存在包含Paris
的行?数组中哪些行包含 Milan
?等等。
关于如何存储列,我有 2 个选项。我可以将其设为 text[]
类型或将其转换为 json 格式 {"cities": ["NY", "Paris", "Milan"]}
然后存储为 JSONB
字段
但是,我不确定什么可以最快地查询我的用例。有没有明显更好的方法来做到这一点?我是否通过选择一个而不是另一个来以任何方式束缚自己?如果我选择一个而不是另一个,那么我该如何查询数据库?
最佳答案
由于您似乎存储的是简单的值列表,因此我建议使用 datataype Array
而不是 JSON
,它更适合更复杂的情况(嵌套数据结构、关联数组, ...).
要检查数组中任意位置的元素值,可以使用数组函数ANY()
。
这是一个查询,它将返回存储在 cities
列中的数组包含 'Paris'
的所有记录:
SELECT t.* FROM mytable t WHERE 'Paris' = ANY(t.cities);
产量:
id cities
---------------------------
A ["NY","Paris","Milan"]
B ["Paris","NY"]
更多信息:
关于sql - 查询postgres中的文本数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54488627/