30 lines
1.4 KiB
SQL
30 lines
1.4 KiB
SQL
CREATE EXTENSION IF NOT EXISTS pg_trgm; -- 三元组模糊搜索
|
|
CREATE EXTENSION IF NOT EXISTS btree_gin; -- 复合 GIN 索引
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto; -- 加密函数
|
|
|
|
CREATE TABLE users
|
|
(
|
|
id BIGINT PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
phone VARCHAR(20) UNIQUE,
|
|
email VARCHAR(100) UNIQUE,
|
|
nickname VARCHAR(100) NOT NULL,
|
|
avatar TEXT,
|
|
bio TEXT,
|
|
"current_role" VARCHAR(20) NOT NULL DEFAULT 'consumer',
|
|
verified_roles TEXT[] DEFAULT ARRAY ['consumer']::TEXT[],
|
|
-- 结构: {"player": "pending", "owner": "rejected", "consumer": "approved"}
|
|
verification_status JSONB DEFAULT '{"consumer": "approved"}'::JSONB,
|
|
is_admin BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMPTZ,
|
|
|
|
CONSTRAINT chk_current_role CHECK (current_role IN ('consumer', 'player', 'owner', 'admin'))
|
|
);
|
|
|
|
-- 索引
|
|
CREATE INDEX idx_users_phone ON users (phone) WHERE deleted_at IS NULL;
|
|
CREATE INDEX idx_users_username_trgm ON users USING gin (username gin_trgm_ops) WHERE deleted_at IS NULL;
|