我目前正在建立一个基于网络的系统,以允许用户在日历中查找船只的可用性。
我正在使用 PostgreSQL 9.6
用户应该能够说我想找到一艘在未来三个月内早上 08:00 到 16:00 之间可运行三个小时的船。
我当前的数据模型如下。
CREATE TABLE cal_calendar (
id INTEGER NOT NULL
, start_time TIMESTAMP NOT NULL
, time_range TSRANGE NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
cal_calendar 表有一个粒度为 15 分钟的 TSRANGE 列,包含:
id | start_time | time_range
------+---------------------+-----------------------------------------------
4225 | 2017-02-14 00:00:00 | ["2017-02-14 00:00:00","2017-02-14 00:15:00")
4226 | 2017-02-14 00:15:00 | ["2017-02-14 00:15:00","2017-02-14 00:30:00")
4227 | 2017-02-14 00:30:00 | ["2017-02-14 00:30:00","2017-02-14 00:45:00")
4228 | 2017-02-14 00:45:00 | ["2017-02-14 00:45:00","2017-02-14 01:00:00")
4229 | 2017-02-14 01:00:00 | ["2017-02-14 01:00:00","2017-02-14 …Run Code Online (Sandbox Code Playgroud) 我有点困惑,因为我相信这个问题的答案相当简单,但我搜索并尝试了多种选择,但找不到正确的答案。
数据库是PostgreSQL 13.1
我正在使用一个 API,它将 JSON 对象发送到数据库中的存储函数,如下所示:
select * from api.car_model_create( '{
"payload": {
"manufacturer": "ai3ZV7PzbP5dNo2fb9q9QGjj2nS5aWJm",
"name": "SR22",
"variant": "G2",
"subname": null
},
"stk": "YbtmjypXMqXb1U5WOq53DxkaxrbIxl4X"
}'::json
);
Run Code Online (Sandbox Code Playgroud)
该函数查询具有以下结构的表:
CREATE TABLE app.car_models (
id INTEGER NOT NULL
, public_id CHARACTER(32) DEFAULT (api.random_string(32))
, name CHARACTER VARYING(64) NOT NULL
, variant CHARACTER VARYING(64)
, subname CHARACTER VARYING(64)
, designator CHARACTER VARYING(16)
, manufacturer INTEGER NOT NULL
, car_type INTEGER
, status INTEGER NOT NULL DEFAULT 1
) WITHOUT OIDS TABLESPACE app;
Run Code Online (Sandbox Code Playgroud)
函数内部是这样的查询: …