我有一个名为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
这些帖子
我该如何实现这些查询?我相信,如果我知道如何查询一个,那么我就能解决其他问题。
如何查询列msg
包含type
的键值为MsgSend
的数据?
如何查询列msg
包含from
的键值为Jeniffer
的数据?
我如何查询列msg
包含MsgSend
且金额为greater than 50
的数据?
我将提供解决这个问题可能需要的任何信息。
官方Postgresql documentation包含您所需要的全部。