-- 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 读写)。