Files

61 lines
2.7 KiB
PL/PgSQL
Raw Permalink Normal View History

2026-09-22 16:08:12 +08:00
-- chongming 机器码授权工具 —— PostgreSQL 台账建表脚本
--
-- 什么时候需要它?
-- 工具**首次连接**会自动执行等价的 DDL(CREATE TABLE IF NOT EXISTS)。
-- 但如果数据库账号没有建表权限,自动建表会失败并提示你执行本脚本 ——
-- 此时请把本文件交给 DBA,在目标库上执行一次即可。
--
-- 执行方式(二选一):
-- psql -h <主机> -p 5432 -U <用户> -d <库名> -f docs/pg_schema.sql
-- 或把下面的语句贴进任意 SQL 客户端执行。
--
-- 账号权限建议:
-- * 日常使用(签发入库、续期改备注):需要 SELECT / INSERT / UPDATE / DELETE
-- * 只做查询检索(如商务查台账):给只读账号 SELECT 即可,工具里"续期/删除"会失败
-- * 建索引/建表:仅首次需要;之后可以收回 DDL 权限
--
-- 注意:本表含客户名称与设备机器指纹,属厂商内部数据,请按公司数据规范授权与备份。
BEGIN;
-- 1) 台账主表。列与本地 SQLite 版**逐列一致**(含列序),
-- 日期列刻意用 TEXT:工具依赖 ISO 日期字符串比较来排序,改成 date 类型会改变语义。
CREATE TABLE IF NOT EXISTS public.issued_licenses (
lic_id TEXT PRIMARY KEY,
machine_code TEXT NOT NULL,
customer TEXT NOT NULL DEFAULT '',
note TEXT NOT NULL DEFAULT '',
plugins_json TEXT NOT NULL,
sources_json TEXT NOT NULL,
not_before TEXT,
expires_at TEXT,
issued_at TEXT NOT NULL DEFAULT '',
kid TEXT NOT NULL DEFAULT '',
public_key_fp TEXT NOT NULL DEFAULT '',
license_json TEXT NOT NULL,
source TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
-- 2) 三个检索索引(与本地版一致:机器码 / 客户 / 到期日)
CREATE INDEX IF NOT EXISTS idx_lic_machine ON public.issued_licenses (machine_code);
CREATE INDEX IF NOT EXISTS idx_lic_customer ON public.issued_licenses (customer);
CREATE INDEX IF NOT EXISTS idx_lic_expires ON public.issued_licenses (expires_at);
-- 3) 结构版本元数据表:工具用它判断"这个库是不是自己这一版建的",
-- 版本不匹配时会拒绝使用并提示先导出台账。
CREATE TABLE IF NOT EXISTS public.chongming_schema (
name TEXT PRIMARY KEY,
version INTEGER NOT NULL
);
INSERT INTO public.chongming_schema (name, version)
VALUES ('issued_licenses', 1)
ON CONFLICT (name) DO NOTHING;
COMMIT;
-- 若要用非 public 的 schema,请把上面的 public 换成目标 schema,
-- 并在工具的「连接设置…」里把 Schema 填成同一个名字(工具会按该 schema 读写)。