PostgreSQL查询包含特定键值的json对象中的行

问题描述 投票:1回答:1

我有一个名为tx的示例表,用于存储有关交易的信息,并且我正在使用PostgreSQL 10.6。

# info about my PostgreSQL version
select version()
> PostgreSQL 10.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11), 64-bit

看起来像这样:

# create table
create table tx (id bigserial primary key, msg jsonb not null);

# create index on 'type' value of msg column
create index on tx using gin ((msg->'type'));

将行插入tx表中

insert into tx (msg) values
('[{"type": "MsgSend", "value": {"amount": [{"denom": "dollar", "amount": "100"}], "from": "Jeniffer", "to": "James" }}]'),
('[{"type": "MsgSend", "value": {"amount": [{"denom": "dollar", "amount": "30"}], "from": "Jeniffer", "to": "James" }}]'),
('[{"type": "MsgBuy", "value": {"amount": [{"denom": "dollar", "amount": "10"}], "from": "George", "to": "Smith" }}]'),
('[{"type": "MsgSend", "value": {"amount": [{"denom": "dollar", "amount": "60"}], "from": "Jeniffer", "to": "James" }}]');

我已经阅读了Querying JSON (JSONB) data types in PostgreSQL并搜索了类似的帖子并使用任何给定的示例进行了测试,但是它们似乎并不能很好地指导我解决我要完成的任务,即查询json object中的行,而不是json array

这些帖子

我该如何实现这些查询?我相信,如果我知道如何查询一个,那么我就能解决其他问题。

  1. 如何查询列msg包含type的键值为MsgSend的数据?

  2. 如何查询列msg包含from的键值为Jeniffer的数据?

  3. 我如何查询列msg包含MsgSend且金额为greater than 50的数据?

我将提供解决这个问题可能需要的任何信息。

sql postgresql postgresql-9.3 jsonb
1个回答
1
投票

官方Postgresql documentation包含您所需要的全部。

© www.soinside.com 2019 - 2024. All rights reserved.