plpgsql_check
1. 概述
在 PostgreSQL 数据库开发过程中,编写存储过程和函数时往往难以在运行前发现代码中的语法错误、类型不匹配、未定义变量等潜在问题。传统方式需要等到函数实际执行时才能发现这些错误,这不仅增加了调试成本,也可能在生产环境中引发意外故障。
plpgsql_check 是一个专为 PostgreSQL 的 PL/pgSQL 语言设计的静态代码分析工具(Linter),它能够在不实际执行函数的情况下,对存储过程和函数的源代码进行深度检查。该工具可以提前发现语法错误、类型不匹配、未使用的变量、性能问题、安全隐患等多种代码质量问题,帮助开发者在开发阶段就确保代码的正确性和健壮性。详情可以参见 plpgsql_check官方文档。
2. 安装
| 源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5 |
2.1. 源码安装
# 从https://github.com/okbob/plpgsql_check/releases/tag/v2.8.3 下载 2.8.3的源码包 plpgsql_check-2.8.3.tar.gz tar xvf plpgsql_check-2.8.3.tar.gz cd plpgsql_check-2.8.3 # 将pg_config的路径设置到PATH环境变量里,eg: export PATH=/usr/local/ivorysql/ivorysql-5/bin/:$PATH make USE_PGXS=1 clean make USE_PGXS=1 all sudo make USE_PGXS=1 install
3. 创建Extension并确认plpgsql_check版本
psql 连接到数据库,执行如下命令:
ivorysql=# CREATE EXTENSION plpgsql_check;
CREATE EXTENSION
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'plpgsql_check';
name | default_version | installed_version | comment
---------------+-----------------+-------------------+---------------------------------------------------
plpgsql_check | 2.8 | 2.8 | extended check for plpgsql functions
(1 row)
4. 使用
4.1. 检查单个函数
-- 创建一个示例函数
CREATE OR REPLACE FUNCTION test_function(p_id integer)
RETURNS text AS $$
DECLARE
v_name text;
v_unused integer; -- 未使用的变量
BEGIN
SELECT name INTO v_name FROM users WHERE id = p_id;
RETURN v_naem; -- 拼写错误
END;
$$ LANGUAGE plpgsql;
-- 使用 plpgsql_check 检查函数
SELECT * FROM plpgsql_check_function('test_function(integer)');
检查结果示例:
plpgsql_check_function -------------------------------------------------------------- error:42601:7:assignment:target variable "v_naem" is undefined warning:00000:4:DECLARE:unused variable "v_unused" (2 rows)
更多详细使用方法和高级特性,请参阅 plpgsql_check官方文档。