PostgreSQL DBA(72)——扩展(pgplsql_check)

  

  PostgreSQL在创建存储过程/函数时没有执行语义分析/校验,可以用plpgsql_check这个插件进行检查,除此之外,该插件还能发现函数依赖和进行函数性能分析。   
  本节简单介绍该扩展的安装和使用。   

  

  pplpgsql_check可完成下面3个工作:   
  1.检查在一个函数代码编译错误   
  2.发现在函数依赖关系   
  3.分析函数      

  特性包括:   

  
  

  1.检查数据库对象和引用类型的字段,在嵌入式SQL   
  2.使用正确类型的函数参数   
  3.argumens argumens未使用的变量和函数,修改的   
  4.部分检测死代码(由于返回命令)   
  5.检测失踪返回命令的功能   
  6.试图识别出不必要的隐藏的投射,可以像未使用索引性能问题   
  7.可能收集关系和函数所使用的函数   
  8.检查执行支撑可能性转为SQL注入漏洞      

  <强>   安装      
  从github上下载源码,使/make install   <>之前   <代码>   [pg12@localhost plpgsql_check] $ pwd/数据//postgresql-12beta1 contrib/plpgsql_check来源   [pg12@localhost plpgsql_check] $ ls   _config。yml plpgsql_check。控制postgresql95-plpgsql_check.spec   预计plpgsql_check。所以postgresql96-plpgsql_check.spec   许可postgresql10-plpgsql_check。规范README.md   Makefile postgresql11-plpgsql_check。规范的sql   元。json postgresql12-plpgsql_check。规范src   msvc postgresql13-plpgsql_check。规范TODO.md   plpgsql_check——1.7。sql postgresql94-plpgsql_check.spec   [pg12@localhost plpgsql_check]美元   …   [pg12@localhost plpgsql_check] $ sudo make install   让- c . ./. .后端generated-headers/src/[1]:进入目录“/数据/源/postgresql-12beta1/src/后端”   让- c目录distprep generated-header-symlinks   [2]:进入目录“/数据/源/postgresql-12beta1/src/后端/目录”   [2]:什么也不需要做“distprep”。   [2]:什么也不需要做“generated-header-symlinks”。   [2]:离开目录“/数据/源/postgresql-12beta1/src/后端/目录”   让- c跑龙套distprep generated-header-symlinks   [2]:进入目录“/数据/源/postgresql-12beta1/src/后端/跑龙套的   [2]:什么也不需要做“distprep”。   [2]:什么也不需要做“generated-header-symlinks”。   [2]:离开目录“/数据/源/postgresql-12beta1/src/后端/跑龙套的   [1]:离开目录“/数据/源/postgresql-12beta1/src/后端”/usr/bin/mkdir - p '/appdb/xdb/pg12beta1/lib/postgresql的/usr/bin/mkdir - p '/appdb/xdb pg12beta1/分享/postgresql/扩展的/usr/bin/mkdir - p '/appdb/xdb pg12beta1/分享/postgresql/扩展的   755 plpgsql_check/usr/bin/install - c - m。所以'/appdb/xdb/pg12beta1/lib/postgresql/plpgsql_check.so '/usr/bin/install - c - m 644。/plpgsql_check。控制”/appdb/xdb/pg12beta1/分享/postgresql/扩展/'/usr/bin/install - c - m 644。/plpgsql_check——1.7。sql '/appdb/xdb pg12beta1/分享/postgresql/扩展/'      之前   

  plpgsql_check插件需要预加载动态链接库,需修改postgresql.conf文件   

  <>之前   <代码>   [pg12@localhost pg12db1] $ grep shared_preload postgresql.conf   shared_preload_libraries=' pg_stat_statements、pg_qualstats plpgsql, plpgsql_check’#(改变需要重新启动)   [pg12@localhost pg12db1]美元pg_ctl重启   等待服务器关闭....完成   服务器停止   等待服务器启动....2019-08-09 12:07:00.242中科[2086]日志:PostgreSQL 12 beta1 x86_64-pc-linux-gnu开始,由海湾合作委员会(gcc)编制4.8.5 20150623 (Red Hat 4.8.5-16), 64位   2019-08-09 12:07:00.243中科[2086]日志:监听IPv4地址0.0.0.0,端口5432   2019-08-09 12:07:00.243中科[2086]日志:监听IPv6地址“::”,端口5432   2019-08-09 12:07:00.256中科[2086]日志:Unix监听套接字“/tmp/.s.PGSQL.5432”   2019-08-09 12:07:00.407中科[2086]日志:将日志输出日志收集过程   2019-08-09 12:07:00.407中科[2086]提示:未来日志输出“pg_log”将出现在目录中。   完成   服务器开始      之前   

  创建扩展   

  <>之前   <代码>   (本地):5432 pg12@testdb=#创建扩展plpgsql_check;   创建扩展   时间:235.761毫秒      之前   

  <强>   语义检查      
  数据表t_noexists不存在,但PG并没有执行语义检查   <>之前   <代码>   (本地):5432 pg12@testdb=#创建或替换过程sp_error (int)   pg12@testdb——#   pg12@testdb - # $ $   pg12@testdb $ #声明   pg12@testdb $ # v_id整数:=0;   pg12@testdb $ #开始   pg12@testdb #从t_notexists选择1美元;   pg12@testdb $ #结束;   语言plpgsql pg12@testdb $ # $ $;   创建过程   时间:2.265毫秒   (本地):5432 pg12@testdb=#叫sp_error (1);   错误:“t_notexists”的关系并不存在   1号线:从t_notexists选择1   ^   查询:从t_notexists选择1   背景:PL/pgSQL函数sp_error(整数)第5行SQL语句   时间:2.743毫秒   (本地):5432 pg12@testdb=#   

PostgreSQL DBA(72)——扩展(pgplsql_check)