后端统一时区为 UTC
This commit is contained in:
@@ -11,8 +11,8 @@ CREATE TABLE IF NOT EXISTS users (
|
||||
role VARCHAR(20) DEFAULT 'USER' NOT NULL,
|
||||
is_active BOOLEAN DEFAULT TRUE NOT NULL,
|
||||
is_superuser BOOLEAN DEFAULT FALSE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
||||
|
||||
CONSTRAINT users_role_check CHECK (role IN ('ADMIN', 'OPERATOR', 'USER', 'VIEWER'))
|
||||
);
|
||||
|
||||
@@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
request_data JSONB,
|
||||
response_status INTEGER,
|
||||
error_message TEXT,
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
|
||||
timestamp TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- 创建索引以提高查询性能
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
-- ============================================
|
||||
-- TJWater Server 时区统一迁移脚本
|
||||
-- 将历史无时区时间列升级为 TIMESTAMP WITH TIME ZONE
|
||||
-- 约定:历史无时区值按 UTC 解释
|
||||
-- ============================================
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'created_at'
|
||||
AND data_type = 'timestamp without time zone'
|
||||
) THEN
|
||||
EXECUTE 'ALTER TABLE public.users
|
||||
ALTER COLUMN created_at TYPE TIMESTAMP WITH TIME ZONE
|
||||
USING created_at AT TIME ZONE ''UTC''';
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'updated_at'
|
||||
AND data_type = 'timestamp without time zone'
|
||||
) THEN
|
||||
EXECUTE 'ALTER TABLE public.users
|
||||
ALTER COLUMN updated_at TYPE TIMESTAMP WITH TIME ZONE
|
||||
USING updated_at AT TIME ZONE ''UTC''';
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'audit_logs'
|
||||
AND column_name = 'timestamp'
|
||||
AND data_type = 'timestamp without time zone'
|
||||
) THEN
|
||||
EXECUTE 'ALTER TABLE public.audit_logs
|
||||
ALTER COLUMN timestamp TYPE TIMESTAMP WITH TIME ZONE
|
||||
USING "timestamp" AT TIME ZONE ''UTC''';
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'scheme_list'
|
||||
AND column_name = 'scheme_start_time'
|
||||
AND data_type IN ('character varying', 'text')
|
||||
) THEN
|
||||
EXECUTE 'ALTER TABLE public.scheme_list
|
||||
ALTER COLUMN scheme_start_time TYPE TIMESTAMP WITH TIME ZONE
|
||||
USING CASE
|
||||
WHEN scheme_start_time ~ ''(Z|[+-][0-9]{2}:[0-9]{2})$'' THEN scheme_start_time::timestamptz
|
||||
ELSE scheme_start_time::timestamp AT TIME ZONE ''UTC''
|
||||
END';
|
||||
END IF;
|
||||
END $$;
|
||||
@@ -9,6 +9,6 @@ create table scheme_list (
|
||||
scheme_type varchar(32) not null,
|
||||
username varchar(32) not null REFERENCES "users"(username) ON UPDATE CASCADE ON DELETE RESTRICT,
|
||||
create_time TIMESTAMP WITH TIME ZONE not null DEFAULT date_trunc('minute', CURRENT_TIMESTAMP),
|
||||
scheme_start_time varchar(50) not null,
|
||||
scheme_start_time TIMESTAMP WITH TIME ZONE not null,
|
||||
scheme_detail JSON
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user