我在PostgreSQL数据库中有一个字段,其格式为["tag1","tag2"]
的JSONB类型,我正在尝试实现一个搜索,它将为预测下拉列表提供结果(即,如果用户输入“t”和上面的列存在两个标记都被返回。
有关如何执行此操作的任何建议吗?
我尝试了下面的查询,但它无效:
SELECT table.tags::JSONB from table where table.tags::TEXT like 't%';
答案 0 :(得分:1)
你可以做的一种方法是使用 jsonb_array_elements_text()函数(https://www.postgresql.org/docs/current/static/functions-json.html)
示例测试:
SELECT T.tags
FROM table T,
LATERAL jsonb_array_elements_text(T.tags) A
WHERE A.value LIKE 't%';
由于jsonb_array_elements_text()创建了一组记录,并且在你的情况下除了LIKE之外没有其他条件,那么使用LATERAL(https://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-LATERAL)可以帮助你这样做:
{'downloader/request_bytes': 38096,
'downloader/request_count': 55,
'downloader/request_method_count/GET': 55,
'downloader/response_bytes': 5014634,
'downloader/response_count': 55,
'downloader/response_status_count/200': 55,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2016, 8, 17, 19, 12, 11, 607000),
'item_scraped_count': 2,
'log_count/DEBUG': 58,
'log_count/INFO': 9,
'log_count/WARNING': 1,
'request_depth_max': 36,
'response_received_count': 55,
'scheduler/dequeued': 55,
'scheduler/dequeued/memory': 55,
'scheduler/enqueued': 55,
'scheduler/enqueued/memory': 55,
'start_time': datetime.datetime(2016, 8, 17, 19, 9, 13, 893000)}