数据库

plpgsql_check: PL/pgSQL 代码检查工具


plpgsql_check 是一个Postgres扩展,用于对plpgsql代码进行语法、语义及其他相关问题的静态检查。该工具帮助开发者在执行代码前识别并修正错误。对于处理大型或复杂SQL代码库的开发者而言,plpgsql_check尤为有用,因为它能在开发周期早期帮助发现和解决问题。

启用扩展

  1. 进入控制面板的数据库页面
  2. 在侧边栏点击扩展
  3. 搜索"plpgsql_check"并启用该扩展

API接口

plpgsql_check_function具有高度可定制性。完整参数列表请参阅官方文档

使用方法

为了演示 plpgsql_check 的功能,我们可以创建一个包含已知错误的函数。在这个例子中,我们创建了一个函数 some_func,它引用了一个不存在的列 place.created_at

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create 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 循环不会执行。

1
2
3
4
5
select public.some_func(); some_func ─────────── (1 row)

现在我们可以使用 plpgsql_check 的 plpgsql_check_function 函数来识别这个已知错误。

1
2
3
4
5
6
select plpgsql_check_function('public.some_func()'); plpgsql_check_function------------------------------------------------------------ error:42703:8:RAISE:记录 "rec" 没有字段 "created_at" Context: SQL 表达式 "rec.created_at"

相关资源