AI-News/new.sql

79 lines
2.3 KiB
MySQL
Raw Permalink Normal View History

2025-12-04 10:04:21 +08:00
-- 0.(若旧库里还没有)创建 updated_at 自动更新函数
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_proc WHERE proname = 'update_updated_at_column'
) THEN
CREATE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $func$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$func$ LANGUAGE plpgsql;
END IF;
END
$$;
-- 1. 角色表
CREATE TABLE IF NOT EXISTS roles (
id SERIAL PRIMARY KEY,
name VARCHAR(64) UNIQUE NOT NULL,
description TEXT NOT NULL DEFAULT '',
permissions JSONB NOT NULL DEFAULT '[]'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 更新时间触发器
DROP TRIGGER IF EXISTS update_role_modtime ON roles;
CREATE TRIGGER update_role_modtime
BEFORE UPDATE ON roles
FOR EACH ROW
EXECUTE PROCEDURE update_updated_at_column();
-- 2. 用户角色关联表
CREATE TABLE IF NOT EXISTS user_roles (
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
role_id INTEGER NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
assigned_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (user_id, role_id)
);
CREATE INDEX IF NOT EXISTS ix_user_roles_role_id ON user_roles(role_id);
-- 3. 插入默认角色
INSERT INTO roles (name, description, permissions)
VALUES ('admin', 'System administrator with full privileges', '["*"]')
ON CONFLICT (name) DO NOTHING;
-- 4. 给指定邮箱的用户授予 admin
DO $$
DECLARE
admin_role_id INTEGER;
target_user_id INTEGER;
BEGIN
SELECT id INTO admin_role_id FROM roles WHERE name = 'admin';
SELECT id INTO target_user_id FROM users WHERE email = 'zsh74110@gmail.com';
IF admin_role_id IS NOT NULL AND target_user_id IS NOT NULL THEN
INSERT INTO user_roles (user_id, role_id)
VALUES (target_user_id, admin_role_id)
ON CONFLICT DO NOTHING;
END IF;
END
$$;
-- 5. 文章排序字段
ALTER TABLE articles
ALTER COLUMN sort_weight TYPE bigint USING sort_weight::bigint,
ALTER COLUMN sort_weight SET DEFAULT 0;
CREATE INDEX IF NOT EXISTS idx_articles_top_sort
ON articles (is_top DESC, sort_weight DESC, created_at DESC);
-- 6. 用户附加字段
ALTER TABLE users
ADD COLUMN IF NOT EXISTS phone TEXT,
ADD COLUMN IF NOT EXISTS user_type TEXT,
ADD COLUMN IF NOT EXISTS company_name TEXT;