plpgsql_check:PL/pgSQL Linter
plpgsql_check 是一个 Postgres 扩展,用于检查 plpgsql 代码的语法、语义和其他相关问题。该工具可以帮助开发者在执行代码之前识别和纠正错误。plpgsql_check 对于处理大型或复杂的 SQL 代码库的开发者来说最有用,因为它有助于在开发周期早期识别和解决问题。
启用扩展#
- 转到仪表板中的 数据库 页面。
- 在侧边栏中单击 扩展。
- 搜索 "plpgsql_check" 并启用该扩展。
API#
plpgsql_check_function( ... ):扫描函数是否存在错误。
plpgsql_check_function 具有高度的可定制性。有关可用参数的完整列表,请参阅 文档
用法#
为了演示 plpgsql_check,我们可以创建一个包含已知错误的函数。在这种情况下,我们创建一个名为 some_func 的函数,该函数引用了不存在的列 place.created_at。
1create table place(2 x float,3 y float4);56create or replace function public.some_func()7 returns void8 language plpgsql9as $$10declare11 rec record;12begin13 for rec in select * from place14 loop15 -- Bug: There is no column `created_at` on table `place`16 raise notice '%', rec.created_at;17 end loop;18end;19$$;请注意,执行该函数不会捕获无效引用错误,因为如果表中没有行,则 loop 不会执行。
1select public.some_func();2 some_func3 ───────────45 (1 row)现在我们可以使用 plpgsql_check 的 plpgsql_check_function 函数来识别已知的错误。
1select plpgsql_check_function('public.some_func()');23 plpgsql_check_function4------------------------------------------------------------5 error:42703:8:RAISE:record "rec" has no field "created_at"6 Context: SQL expression "rec.created_at"