postgersql.sql 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- CREATE DATABASE serve;
  2. -- USE serve;
  3. -- 创建 schema(如果不存在)
  4. CREATE SCHEMA IF NOT EXISTS dev;
  5. -- 删除序列(如果存在)
  6. -- DROP SEQUENCE IF EXISTS dev.user_id_seq;
  7. -- 创建新序列
  8. -- CREATE SEQUENCE dev.user_id_seq
  9. -- START WITH 1
  10. -- INCREMENT BY 1
  11. -- NO MINVALUE
  12. -- NO MAXVALUE
  13. -- CACHE 1;
  14. -- 添加注释
  15. -- COMMENT ON SEQUENCE dev.user_seq IS '用户表ID序列';
  16. DROP TABLE IF EXISTS dev.user;
  17. -- 在 dev schema 下创建用户表
  18. CREATE TABLE dev.user (
  19. id SERIAL PRIMARY KEY,
  20. account VARCHAR(50) NOT NULL UNIQUE,
  21. password VARCHAR(255) NOT NULL,
  22. username VARCHAR(100) NOT NULL,
  23. role VARCHAR(20) NOT NULL DEFAULT 'user' CHECK ( role IN ('user','expert','admin') ),
  24. avatar TEXT,
  25. phone_number char(11),
  26. enable INT NOT NULL DEFAULT 1,
  27. delete_flag INT NOT NULL DEFAULT 0
  28. );
  29. -- 添加注释
  30. COMMENT ON TABLE dev.user IS '用户表';
  31. COMMENT ON COLUMN dev.user.id IS '用户ID,自增主键';
  32. COMMENT ON COLUMN dev.user.account IS '账号,唯一';
  33. COMMENT ON COLUMN dev.user.password IS '密码';
  34. COMMENT ON COLUMN dev.user.username IS '用户名';
  35. COMMENT ON COLUMN dev.user.role IS '角色';
  36. COMMENT ON COLUMN dev.user.avatar IS '头像URL';
  37. COMMENT ON COLUMN dev.user.phone_number IS '手机号码';
  38. COMMENT ON COLUMN dev.user.enable IS '是否启用';
  39. COMMENT ON COLUMN dev.user.delete_flag IS '删除标记';
  40. -- 创建索引
  41. CREATE INDEX idx_user_account ON dev.user(account);
  42. CREATE INDEX idx_user_role ON dev.user(role);
  43. CREATE INDEX idx_user_enable ON dev.user(enable);
  44. CREATE INDEX idx_user_delete_flag ON dev.user(delete_flag);
  45. -- 元数据
  46. CREATE TABLE dev.meta (
  47. id SERIAL PRIMARY KEY,
  48. key VARCHAR(32) NOT NULL,
  49. value JSONB
  50. );
  51. -- 2. 添加注释
  52. COMMENT ON TABLE dev.meta IS '元数据表,用于存储键值对形式的配置或扩展属性';
  53. COMMENT ON COLUMN dev.meta.id IS '自增主键,唯一标识一条元数据记录';
  54. COMMENT ON COLUMN dev.meta.key IS '元数据的键,长度不超过32个字符,不可为空';
  55. COMMENT ON COLUMN dev.meta.value IS '元数据的值,使用 JSONB 类型存储,支持结构化数据';
  56. -- 3. 索引建议
  57. -- 业务上 key 通常需要唯一约束,且频繁用于等值查询
  58. CREATE UNIQUE INDEX idx_meta_key ON dev.meta (key);
  59. -- 若经常对 value 内部字段进行查询或过滤,可添加 GIN 索引以加速 JSONB 操作
  60. CREATE INDEX idx_meta_value_gin ON dev.meta USING GIN (value);
  61. INSERT INTO dev.meta(key, value) VALUES
  62. ('website_config','{
  63. "title": "示例网站",
  64. "logo": "",
  65. "announcement": "欢迎访问我们的网站!",
  66. "statement": "版权所有 © 2025 示例网站"
  67. }');