diff --git a/model/db.go b/model/db.go index 068c4e7..4cb094f 100644 --- a/model/db.go +++ b/model/db.go @@ -42,21 +42,33 @@ func InitDB() error { func createRS485Table() error { _, err := db.Exec(` CREATE TABLE IF NOT EXISTS rs485_weather_data ( - id SERIAL PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, station_id VARCHAR(50) NOT NULL, - timestamp TIMESTAMP NOT NULL, - temperature DECIMAL(5,2), -- 温度(摄氏度) - humidity DECIMAL(5,2), -- 湿度(%) - wind_speed DECIMAL(5,2), -- 风速(m/s) - wind_direction DECIMAL(5,2), -- 风向(度) - rainfall DECIMAL(5,2), -- 降雨量(mm) - light DECIMAL(10,2), -- 光照(lux) - uv DECIMAL(5,2), -- 紫外线 - pressure DECIMAL(7,2), -- 气压(hPa) - raw_data TEXT, -- 原始数据 - FOREIGN KEY (station_id) REFERENCES stations(station_id) + timestamp TIMESTAMPTZ NOT NULL, + temperature DOUBLE PRECISION, + humidity DOUBLE PRECISION, + wind_speed DOUBLE PRECISION, + wind_direction DOUBLE PRECISION, + rainfall DOUBLE PRECISION, + light DOUBLE PRECISION, + uv DOUBLE PRECISION, + pressure DOUBLE PRECISION, + raw_data TEXT, + FOREIGN KEY (station_id) REFERENCES stations(station_id), + UNIQUE (station_id, timestamp) )`) - return err + if err != nil { + return err + } + + // 支持性索引(若已存在则不重复创建) + if _, err = db.Exec(`CREATE INDEX IF NOT EXISTS idx_rwd_time ON rs485_weather_data (timestamp)`); err != nil { + return err + } + if _, err = db.Exec(`CREATE INDEX IF NOT EXISTS idx_rwd_station_time ON rs485_weather_data (station_id, timestamp)`); err != nil { + return err + } + return nil } func CloseDB() {