首页 > 数据库 > 国内数据库 > OpenClaw+Docker+KWDB3.1



– 建表(已删除所有外键!)
CREATE TABLE monitor_location (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
city VARCHAR(50) NOT NULL,
district VARCHAR(50) NOT NULL,
latitude DECIMAL(9,6),
longitude DECIMAL(9,6),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vehicle_info (
id SERIAL PRIMARY KEY,
plate_no VARCHAR(20) NOT NULL UNIQUE,
vehicle_type VARCHAR(20),
register_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE traffic_flow (
id BIGSERIAL PRIMARY KEY,
vehicle_id INT NOT NULL,
location_id INT NOT NULL,
pass_time TIMESTAMP NOT NULL,
speed DECIMAL(5,2),
direction VARCHAR(10)
);
– 索引
CREATE INDEX idx_traffic_flow_vehicle_id ON traffic_flow(vehicle_id);
CREATE INDEX idx_traffic_flow_location_id ON traffic_flow(location_id);
CREATE INDEX idx_traffic_flow_pass_time ON traffic_flow(pass_time);
– 1万监控点
INSERT INTO monitor_location (name, city, district, latitude, longitude)
SELECT ‘monitor’,‘北京’,‘朝阳’,
round((random()*40+20)::numeric,6),
round((random()*50+70)::numeric,6)
FROM generate_series(1,10000) AS i;
– 10万车辆
INSERT INTO vehicle_info (plate_no, vehicle_type, register_date)
SELECT ‘VN’||CAST(i AS VARCHAR),‘小型车’,‘2020-01-01’
FROM generate_series(1,100000) AS i;
– 100万过车流水(无任何外键,绝对不报错)
INSERT INTO traffic_flow (vehicle_id, location_id, pass_time, speed, direction)
SELECT
(i % 100000) + 1,
(i % 10000) + 1,
CAST(‘2025-01-01 00:00:00’ AS TIMESTAMP) + (i%1000) * INTERVAL ‘1 second’,
round((random()*60+20)::numeric,2),
‘东’
FROM generate_series(1,1000000) AS i;

看到这里可能大家说这个像PG啊。是不是基于PG?答:不是。但是对PG的语法兼容度好。
看一下数据样本。还挺像我以前公安时候的数据。

select t.plate_no,v.vehicle_type,t.device_code,pass_time,city,district from traffic_flow t,monitor_location m,vehicle_info v where t.plate_no=v.plate_no and t.device_code=m.device_code limit 10;
最终在一个SQL中完成了关联查询。这是非常重要的,即在时序数据库中可以关联查询。这不是所有时序数据库都可以的。这就是我要的结果。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-3113548/ ,如需转载,请注明出处,否则将追究法律责任。