FR-121 子卡 .6,.1~.5 已全部驗收通過後的最後一張。決策者裁「這次就修」(進 b4)。來源:CM-2254/CM-2257 首腦裁示——api_logs/system_logs 的 act_time 是月分割鍵,PostgreSQL 不准改型別,要重建母表。

這卡在做什麼(白話)

全庫只剩兩張操作紀錄表的「操作時間」還是沒帶時區的欄位,因為它是按月分割的分割鍵,資料庫不讓直接改型別。本卡照六月那支分割表 migration 的手法,建一張帶時區的新母表、依既有分區範圍建月分區、把資料搬過去、換名字、更新自動建分區的函式,最後把守衛測試的例外拿掉。做完全庫沒有任何一欄要猜時區。

現況(DEV 實查)

public.api_logs      RANGE (act_time)  timestamp without time zone;DEV 7 分區(2026_06~2026_08+default),20,479 列;190 5,400 列
public.system_logs   RANGE (act_time)  同上;DEV 3,154 列;190 91 列
函式 public.maintain_log_partitions()  自動建下月分區(pg_cron 未接,留著給排程接)
前例:BE scripts/sql/2026-06-03-log-tables-partitioning.sql(建 _p 新母表 → DO 迴圈建分區 → INSERT SELECT → RENAME swap → 舊表留 _old)
act_time 舊值:本地寫入(Asia/Taipei),與 created_at 同源
守衛:BE test/test_no_naive_timestamp_columns.py 例外清單目前放行這兩欄(含分區);第二條測試會在母表改好時要求拿掉例外
序列化:act_time 相關 serializer 仍是舊格式,CM-2257 刻意保留

做法

驗證

工作區(只能在這裡改,絕不碰主 checkout)