postgres:
image: postgres:15
container_name: cancer-postgres
restart: always
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin123
POSTGRES_DB: cancer_db
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
這樣會啟動一個 PostgreSQL,資料庫名稱是 cancer_db。
docker compose up -d
進入 PostgreSQL:
docker exec -it cancer-postgres psql -U admin -d cancer_db
建立病人數據表:
CREATE TABLE cancer_patients (
id SERIAL PRIMARY KEY,
patient_id VARCHAR(10),
record_date DATE,
afp INT,
alt INT
);
插入測試數據:
INSERT INTO cancer_patients (patient_id, record_date, afp, alt) VALUES
('001', '2025-08-01', 120, 30),
('001', '2025-08-10', 180, 40),
('001', '2025-08-20', 300, 60),
('001', '2025-08-30', 500, 90),
('002', '2025-08-01', 90, 25),
('002', '2025-08-15', 160, 45),
('002', '2025-08-30', 280, 60);
檢查:
SELECT * FROM cancer_patients;
4.在 Grafana 查詢資料
新增一個 Panel → Query → SQL:
SELECT
record_date AS "time",
afp
FROM cancer_patients
WHERE patient_id = '001'
ORDER BY record_date;
就能畫出病人 001 的 AFP 趨勢圖。
如果要同時畫 ALT:
SELECT
record_date AS "time",
afp,
alt
FROM cancer_patients
WHERE patient_id = '001'
ORDER BY record_date;
在 Panel 裡設定:
● AFP → 左軸
● ALT → 右軸
5.成果
● 我們不再用 log 檔,而是把數據存進 PostgreSQL
● Grafana 直接查詢資料庫,畫出病人 AFP/ALT 趨勢
● 更接近「臨床資料庫 + 視覺化」的真實場景