44 lines
2.6 KiB
MySQL
44 lines
2.6 KiB
MySQL
|
|
-- =============================================================================
|
|||
|
|
-- 审批类单据时间口径统一(全部落到 naive 北京时间)
|
|||
|
|
--
|
|||
|
|
-- 背景:
|
|||
|
|
-- 1) 容器内 PostgreSQL 时区为 Etc/UTC,库级默认 now() / CURRENT_TIMESTAMP 均为 UTC;
|
|||
|
|
-- 2) scrap_approval 原先用 timestamptz 列 + tz-aware Python 值,而
|
|||
|
|
-- outbound_approval / borrow_approval 用 timestamp without time zone 列;
|
|||
|
|
-- 三张表口径不一致,且 outbound/borrow 的 DB 默认值 CURRENT_TIMESTAMP 是 UTC,
|
|||
|
|
-- 一旦有绕过 ORM 的写入就会产生 8 小时偏差。
|
|||
|
|
--
|
|||
|
|
-- 目标:
|
|||
|
|
-- · 三张审批单表的 created_at / updated_at 统一为 timestamp without time zone;
|
|||
|
|
-- · DB 侧默认值统一为 timezone('Asia/Shanghai', now()),即北京时间;
|
|||
|
|
-- · 应用层(SQLAlchemy 模型)始终显式传 beijing_time(),不依赖 DB 默认值。
|
|||
|
|
--
|
|||
|
|
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
|||
|
|
-- =============================================================================
|
|||
|
|
BEGIN;
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------------------------------
|
|||
|
|
-- 1) scrap_approval:timestamptz -> timestamp without time zone
|
|||
|
|
-- (该表此前无业务数据,转换不会造成既有时间语义漂移;
|
|||
|
|
-- ALTER 后原 timestamptz 值会按会话时区 UTC 取钟面值,如需保留请先备份)
|
|||
|
|
-- -----------------------------------------------------------------------------
|
|||
|
|
ALTER TABLE scrap_approval
|
|||
|
|
ALTER COLUMN created_at TYPE timestamp without time zone,
|
|||
|
|
ALTER COLUMN updated_at TYPE timestamp without time zone,
|
|||
|
|
ALTER COLUMN approved_at TYPE timestamp without time zone,
|
|||
|
|
ALTER COLUMN executed_at TYPE timestamp without time zone;
|
|||
|
|
|
|||
|
|
ALTER TABLE scrap_approval ALTER COLUMN created_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
ALTER TABLE scrap_approval ALTER COLUMN updated_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------------------------------
|
|||
|
|
-- 2) outbound_approval / borrow_approval:DB 默认值由 UTC 改为北京时间
|
|||
|
|
-- 列类型本就是 naive,无需转换
|
|||
|
|
-- -----------------------------------------------------------------------------
|
|||
|
|
ALTER TABLE outbound_approval ALTER COLUMN created_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
ALTER TABLE outbound_approval ALTER COLUMN updated_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
ALTER TABLE borrow_approval ALTER COLUMN created_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
ALTER TABLE borrow_approval ALTER COLUMN updated_at SET DEFAULT timezone('Asia/Shanghai', now());
|
|||
|
|
|
|||
|
|
COMMIT;
|