-- 创建tokens表 CREATE TABLE IF NOT EXISTS tokens ( id VARCHAR(255) NOT NULL, -- token的唯一标识符 user_id VARCHAR(255) NOT NULL, -- 用户ID issuer VARCHAR(255) NOT NULL, -- 令牌发行者 account VARCHAR(255) NOT NULL, -- 账户名称 secret TEXT NOT NULL, -- 密钥 type VARCHAR(10) NOT NULL, -- 令牌类型(totp/hotp) counter INTEGER, -- HOTP计数器(可选) period INTEGER NOT NULL, -- TOTP周期(秒) digits INTEGER NOT NULL, -- 验证码位数 algorithm VARCHAR(10) NOT NULL DEFAULT 'SHA1', -- 使用的哈希算法 timestamp BIGINT NOT NULL, -- 最后更新时间戳 created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id, user_id) ); -- 创建更新时间戳的触发器 CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; CREATE TRIGGER update_tokens_updated_at BEFORE UPDATE ON tokens FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- 创建索引 CREATE INDEX IF NOT EXISTS idx_tokens_user_id ON tokens(user_id); CREATE INDEX IF NOT EXISTS idx_tokens_timestamp ON tokens(timestamp); -- 添加注释 COMMENT ON TABLE tokens IS 'OTP令牌数据表'; COMMENT ON COLUMN tokens.id IS '令牌的唯一标识符'; COMMENT ON COLUMN tokens.user_id IS '用户ID'; COMMENT ON COLUMN tokens.issuer IS '令牌发行者'; COMMENT ON COLUMN tokens.account IS '账户名称'; COMMENT ON COLUMN tokens.secret IS '密钥'; COMMENT ON COLUMN tokens.type IS '令牌类型(totp/hotp)'; COMMENT ON COLUMN tokens.counter IS 'HOTP计数器(可选)'; COMMENT ON COLUMN tokens.period IS 'TOTP周期(秒)'; COMMENT ON COLUMN tokens.digits IS '验证码位数'; COMMENT ON COLUMN tokens.algorithm IS '使用的哈希算法'; COMMENT ON COLUMN tokens.timestamp IS '最后更新时间戳'; COMMENT ON COLUMN tokens.created_at IS '创建时间'; COMMENT ON COLUMN tokens.updated_at IS '最后更新时间';