plpgsql_check: PL/pgSQL 代码检查工具
plpgsql_check 是一个Postgres扩展,用于对plpgsql代码进行语法、语义及其他相关问题的静态检查。该工具帮助开发者在执行代码前识别并修正错误。对于处理大型或复杂SQL代码库的开发者而言,plpgsql_check尤为有用,因为它能在开发周期早期帮助发现和解决问题。
启用扩展
- 进入控制面板的数据库页面
- 在侧边栏点击扩展
- 搜索"plpgsql_check"并启用该扩展
API接口
plpgsql_check_function( ... )
: 扫描函数中的错误
plpgsql_check_function
具有高度可定制性。完整参数列表请参阅官方文档
使用方法
为了演示 plpgsql_check
的功能,我们可以创建一个包含已知错误的函数。在这个例子中,我们创建了一个函数 some_func
,它引用了一个不存在的列 place.created_at
。
12345678910111213141516171819create table place( x float, y float);create or replace function public.some_func() returns void language plpgsqlas $$declare rec record;begin for rec in select * from place loop -- Bug: 表 `place` 中不存在列 `created_at` raise notice '%', rec.created_at; end loop;end;$$;
需要注意的是,执行该函数不会捕获无效引用错误,因为如果表中没有数据行,loop
循环不会执行。
12345select public.some_func(); some_func ─────────── (1 row)
现在我们可以使用 plpgsql_check 的 plpgsql_check_function
函数来识别这个已知错误。
123456select plpgsql_check_function('public.some_func()'); plpgsql_check_function------------------------------------------------------------ error:42703:8:RAISE:记录 "rec" 没有字段 "created_at" Context: SQL 表达式 "rec.created_at"