68 lines
2.3 KiB
PL/PgSQL
68 lines
2.3 KiB
PL/PgSQL
-- ============================================
|
||
-- TJWater Server 用户系统数据库迁移脚本
|
||
-- ============================================
|
||
|
||
-- 创建用户表
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id SERIAL PRIMARY KEY,
|
||
username VARCHAR(50) UNIQUE NOT NULL,
|
||
email VARCHAR(100) UNIQUE NOT NULL,
|
||
hashed_password VARCHAR(255) NOT NULL,
|
||
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,
|
||
|
||
CONSTRAINT users_role_check CHECK (role IN ('ADMIN', 'OPERATOR', 'USER', 'VIEWER'))
|
||
);
|
||
|
||
-- 创建索引
|
||
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
|
||
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
||
CREATE INDEX IF NOT EXISTS idx_users_role ON users(role);
|
||
CREATE INDEX IF NOT EXISTS idx_users_is_active ON users(is_active);
|
||
|
||
-- 创建触发器自动更新 updated_at
|
||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||
RETURN NEW;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
DROP TRIGGER IF EXISTS update_users_updated_at ON users;
|
||
CREATE TRIGGER update_users_updated_at
|
||
BEFORE UPDATE ON users
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
-- 创建默认管理员账号 (密码: admin123)
|
||
INSERT INTO users (username, email, hashed_password, role, is_superuser)
|
||
VALUES (
|
||
'admin',
|
||
'admin@tjwater.com',
|
||
'$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5aeAJK.1tYKAW',
|
||
'ADMIN',
|
||
TRUE
|
||
) ON CONFLICT (username) DO NOTHING;
|
||
|
||
-- 迁移现有硬编码用户 (tjwater/tjwater@123)
|
||
INSERT INTO users (username, email, hashed_password, role, is_superuser)
|
||
VALUES (
|
||
'tjwater',
|
||
'tjwater@tjwater.com',
|
||
'$2b$12$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW',
|
||
'ADMIN',
|
||
TRUE
|
||
) ON CONFLICT (username) DO NOTHING;
|
||
|
||
-- 添加注释
|
||
COMMENT ON TABLE users IS '用户表 - 存储系统用户信息';
|
||
COMMENT ON COLUMN users.id IS '用户ID(主键)';
|
||
COMMENT ON COLUMN users.username IS '用户名(唯一)';
|
||
COMMENT ON COLUMN users.email IS '邮箱地址(唯一)';
|
||
COMMENT ON COLUMN users.hashed_password IS 'bcrypt 密码哈希';
|
||
COMMENT ON COLUMN users.role IS '用户角色: ADMIN, OPERATOR, USER, VIEWER';
|