plpgsql_wrap 是一个 PostgreSQL 扩展/语言,用于对 PL/pgSQL 源码进行混淆,让用户无法直接阅读源码,但数据库仍可正常执行。它主要用于在向第三方交付存储过程/函数时保护知识产权或敏感业务逻辑,理念上类似于 Oracle 的 WRAP 工具。
HexaCluster 宣布 plpgsql_wrap v1.0 发布:这是该项目的首个公开版本,兼容 PostgreSQL 12 及以上。
LANGUAGE plpgsql_wrap 编写/创建存储过程。pg_proc.prosrc。pg_dump 也不会导出明文源码;导出结果可直接还原。CREATE 时直接提供预先 wrap 好的加密 blob。它与 LANGUAGE plpgsql 的行为基本一致,仅语言名变为 plpgsql_wrap。
```sql CREATE OR REPLACE FUNCTION public.calculate_bonus(emp_id int, yr int) RETURNS numeric LANGUAGE plpgsql_wrap AS $$ DECLARE v_salary numeric; BEGIN SELECT salary INTO v_salary FROM employees WHERE id = emp_id; RETURN v_salary * 0.15; -- confidential formula END; $$;
SELECT calculate_bonus(42, 2024); ```