otpm/init/postgresql/init.sql
2025-06-09 11:20:07 +08:00

51 lines
No EOL
2.1 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 创建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, -- 验证码位数
algo VARCHAR(10) NOT NULL, -- 使用的哈希算法
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.algo IS '使用的哈希算法';
COMMENT ON COLUMN tokens.timestamp IS '最后更新时间戳';
COMMENT ON COLUMN tokens.created_at IS '创建时间';
COMMENT ON COLUMN tokens.updated_at IS '最后更新时间';