61 lines
2.7 KiB
PL/PgSQL
61 lines
2.7 KiB
PL/PgSQL
-- 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 读写)。
|