查找具有特定数组值的 postgres jsonb 列的所有行
find all rows that for a postgres jsonb column that have a specfic array value
(使用 Postgres 9.5)
假设您有一个具有以下架构的 Postgres table:
Table "public.tableA"
Column | Type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+----------------------------------------------
id | bigint | | not null | nextval('truelayer_tokens_id_seq'::regclass)
user_id | text | | not null |
created_at | timestamp with time zone | | | now()
updated_at | timestamp with time zone | | |
provider_id | text | | not null | ''::text
scopes | jsonb | | not null | '{}'::jsonb
在范围列中是以下各种 user_ids 数据的子集。
["A", "B", "C", "D", "E"]
- 有些用户会有范围:
["A"]
- 有些用户会有范围:
["B","C","D"]
- 有些用户会有范围:
["A","D"]
我想 运行 查询 returns 特定 user_id 的所有行,其中“范围”中的数组包含值“A”
我什至都在努力着手,所以感谢所有建议。
使用 jsonb
包含运算符 @>
:
SELECT id, scopes
FROM "tableA"
WHERE scopes @> '["A"]';
(使用 Postgres 9.5)
假设您有一个具有以下架构的 Postgres table:
Table "public.tableA"
Column | Type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+----------------------------------------------
id | bigint | | not null | nextval('truelayer_tokens_id_seq'::regclass)
user_id | text | | not null |
created_at | timestamp with time zone | | | now()
updated_at | timestamp with time zone | | |
provider_id | text | | not null | ''::text
scopes | jsonb | | not null | '{}'::jsonb
在范围列中是以下各种 user_ids 数据的子集。
["A", "B", "C", "D", "E"]
- 有些用户会有范围:
["A"]
- 有些用户会有范围:
["B","C","D"]
- 有些用户会有范围:
["A","D"]
我想 运行 查询 returns 特定 user_id 的所有行,其中“范围”中的数组包含值“A”
我什至都在努力着手,所以感谢所有建议。
使用 jsonb
包含运算符 @>
:
SELECT id, scopes
FROM "tableA"
WHERE scopes @> '["A"]';