kcg-monitoring/database/migration/004_sensor_data.sql
htlee e6680f6e03 feat: 지진파(USGS) + 기압(Open-Meteo) 수집기 + DB 테이블 설계
Backend:
- SeismicCollector: USGS FDSN API, 이란 bbox, 5분 주기, M2+
- PressureCollector: Open-Meteo API, 이란 5개 관측점, 10분 주기
- Entity: seismic_events, pressure_readings (DB 마이그레이션 004)
- REST: GET /api/sensor/seismic, GET /api/sensor/pressure
- Caffeine 캐시: seismic, pressure (TTL 2일)

Frontend:
- SensorChart 그래프 순서: 지진파 → 기압 → 소음 → 방사선
- 소음/방사선 차트에 (DEMO) 라벨 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:05:11 +09:00

31 lines
1002 B
SQL

SET search_path TO kcg, public;
-- 지진 이벤트 (USGS)
CREATE TABLE IF NOT EXISTS seismic_events (
id BIGSERIAL PRIMARY KEY,
usgs_id VARCHAR(30) UNIQUE NOT NULL,
magnitude DOUBLE PRECISION NOT NULL,
depth DOUBLE PRECISION,
lat DOUBLE PRECISION NOT NULL,
lng DOUBLE PRECISION NOT NULL,
place VARCHAR(255),
event_time TIMESTAMPTZ NOT NULL,
collected_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_seismic_events_time ON seismic_events(event_time DESC);
-- 기압 데이터 (Open-Meteo)
CREATE TABLE IF NOT EXISTS pressure_readings (
id BIGSERIAL PRIMARY KEY,
station VARCHAR(50) NOT NULL,
lat DOUBLE PRECISION NOT NULL,
lng DOUBLE PRECISION NOT NULL,
pressure_hpa DOUBLE PRECISION NOT NULL,
reading_time TIMESTAMPTZ NOT NULL,
collected_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE(station, reading_time)
);
CREATE INDEX IF NOT EXISTS idx_pressure_readings_time ON pressure_readings(reading_time DESC);