229_plugins.sql 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -- 管理员手动上传的本地进程插件。
  2. -- 插件默认停用;账号表不保存任何插件字段。
  3. -- 表名使用 sub2api 前缀,避免与部署数据库中已有的通用插件表冲突。
  4. CREATE TABLE IF NOT EXISTS sub2api_plugin_installations (
  5. id BIGSERIAL PRIMARY KEY,
  6. plugin_key VARCHAR(160) NOT NULL UNIQUE,
  7. name VARCHAR(160) NOT NULL,
  8. version VARCHAR(64) NOT NULL,
  9. description TEXT NOT NULL DEFAULT '',
  10. author VARCHAR(160) NOT NULL DEFAULT '',
  11. manifest JSONB NOT NULL DEFAULT '{}'::jsonb,
  12. artifact_path TEXT NOT NULL,
  13. install_path TEXT NOT NULL,
  14. binary_path TEXT NOT NULL,
  15. binary_sha256 VARCHAR(64) NOT NULL,
  16. signature_status VARCHAR(32) NOT NULL DEFAULT 'unsigned',
  17. state VARCHAR(32) NOT NULL DEFAULT 'disabled',
  18. config_encrypted TEXT NOT NULL DEFAULT '',
  19. last_error TEXT NOT NULL DEFAULT '',
  20. installed_by BIGINT REFERENCES users(id) ON DELETE SET NULL,
  21. installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  22. enabled_at TIMESTAMPTZ,
  23. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  24. CONSTRAINT sub2api_plugin_installations_state_check
  25. CHECK (state IN ('disabled', 'starting', 'enabled', 'error', 'incompatible')),
  26. CONSTRAINT sub2api_plugin_installations_signature_status_check
  27. CHECK (signature_status IN ('trusted', 'unsigned'))
  28. );
  29. CREATE TABLE IF NOT EXISTS sub2api_plugin_bindings (
  30. id BIGSERIAL PRIMARY KEY,
  31. plugin_id BIGINT NOT NULL REFERENCES sub2api_plugin_installations(id) ON DELETE CASCADE,
  32. capability VARCHAR(160) NOT NULL,
  33. platform VARCHAR(32) NOT NULL,
  34. account_type VARCHAR(32) NOT NULL,
  35. enabled BOOLEAN NOT NULL DEFAULT FALSE,
  36. rollout_percent INTEGER NOT NULL DEFAULT 100,
  37. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  38. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  39. CONSTRAINT sub2api_plugin_bindings_rollout_check CHECK (rollout_percent BETWEEN 0 AND 100),
  40. CONSTRAINT sub2api_plugin_bindings_scope_unique UNIQUE (plugin_id, capability, platform, account_type)
  41. );
  42. CREATE INDEX IF NOT EXISTS idx_sub2api_plugin_bindings_plugin_id
  43. ON sub2api_plugin_bindings(plugin_id);
  44. CREATE INDEX IF NOT EXISTS idx_sub2api_plugin_bindings_enabled_scope
  45. ON sub2api_plugin_bindings(platform, account_type, capability)
  46. WHERE enabled = TRUE;
  47. CREATE UNIQUE INDEX IF NOT EXISTS idx_sub2api_plugin_bindings_one_enabled_scope
  48. ON sub2api_plugin_bindings(capability, platform, account_type)
  49. WHERE enabled = TRUE;