小编Ale*_*ani的帖子

jsonb 可以按*值* 甚至部分值进行快速搜索吗?其他类型?

我有一个person必须插入任意数据的表。由于我使用的是 Postgres 9.4,因此jsonb似乎是正确的选择。

示例数据:

id: 1, name: "Joe Doe", preferences: { color: "red" , toy: "car"}
id: 2, name: "Jane Doe", preferences: { color: "blue", food: "hamburguer" }
Run Code Online (Sandbox Code Playgroud)

问题是我需要通过变量值来查询它,例如:

所有在偏好上有“汉堡包”的人,部分查询也必须是可能的,所以搜索“b​​urg”必须给我带来记录2。

使用json函数,我可以搜索值,只要我知道key,对吗?或者有一种快速搜索值的方法?

我想做的是创建一个 tsvector 列并转储 json 以使用全文搜索来执行部分查询。

postgresql database-design full-text-search json

7
推荐指数
1
解决办法
4600
查看次数

PostgreSQL 查询重构

我有一个简单的表叫做事件

它有日期、开始时间、结束时间和状态

我在同一日期有多个事件,开始和结束。

要知道是否有人可以预约,我必须检查该日期和开始,结束我是否有一条状态为假(未占用)的行。

带有一些示例代码的表定义:

CREATE SEQUENCE events_id_seq;

CREATE TABLE events(
  id int4 NOT NULL DEFAULT nextval('events_id_seq'::regclass),
  event_date date NULL,
  status bool NULL DEFAULT false,
  event_start time NULL,
  event_end   time NULL
) ;

INSERT INTO events(event_date,status,event_start,event_end)
VALUES
('2016-10-10', TRUE, '08:00:00','08:30:00'),
('2016-10-10', TRUE, '08:00:00','08:30:00'),
('2016-10-10', FALSE, '08:00:00','08:30:00'),
('2016-10-10', TRUE, '08:00:00','08:30:00'),
('2016-10-10', TRUE, '08:30:00','09:00:00'),
('2016-10-10', FALSE, '08:30:00','09:00:00'),
('2016-10-10', FALSE, '08:30:00','09:00:00'),
('2016-10-10', FALSE, '08:30:00','09:00:00');

select distinct event_date, event_start, event_end, (
    select count(*) from events e1
    where 
        e1.status = false and
        e1.event_date = e.event_date …
Run Code Online (Sandbox Code Playgroud)

postgresql query-refactor

4
推荐指数
1
解决办法
491
查看次数