数据库

plpgsql_check:PL/pgSQL Linter


plpgsql_check 是一个 Postgres 扩展,用于检查 plpgsql 代码的语法、语义和其他相关问题。该工具可以帮助开发者在执行代码之前识别和纠正错误。plpgsql_check 对于处理大型或复杂的 SQL 代码库的开发者来说最有用,因为它有助于在开发周期早期识别和解决问题。

启用扩展#

  1. 转到仪表板中的 数据库 页面。
  2. 在侧边栏中单击 扩展
  3. 搜索 "plpgsql_check" 并启用该扩展。

API#

plpgsql_check_function 具有高度的可定制性。有关可用参数的完整列表,请参阅 文档

用法#

为了演示 plpgsql_check,我们可以创建一个包含已知错误的函数。在这种情况下,我们创建一个名为 some_func 的函数,该函数引用了不存在的列 place.created_at

1
create table place(
2
x float,
3
y float
4
);
5
6
create or replace function public.some_func()
7
returns void
8
language plpgsql
9
as $$
10
declare
11
rec record;
12
begin
13
for rec in select * from place
14
loop
15
-- Bug: There is no column `created_at` on table `place`
16
raise notice '%', rec.created_at;
17
end loop;
18
end;
19
$$;

请注意,执行该函数不会捕获无效引用错误,因为如果表中没有行,则 loop 不会执行。

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

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

1
select plpgsql_check_function('public.some_func()');
2
3
plpgsql_check_function
4
------------------------------------------------------------
5
error:42703:8:RAISE:record "rec" has no field "created_at"
6
Context: SQL expression "rec.created_at"

资源#