Postgre SQL   发布时间:2022-05-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了查看未使用oid脚本unused_oids解析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

首先上运行效果,有个直观认识:

简要说明:从src/include/catalog目录下的pg_*.h toasTing.h indexing.h中获取所有已经使用的oID,最后将2--FistbootstrapObjectID-1(即10000-1)之间的未使用的ID打印出来。其中涉及管道符使用,正则表达式,更有许多有用的linux小命令,譬如grep(egrep),sed,tr,sort,uniq,awk,都是一些常用的命令(所以对于初学者这个sHell学习价值还蛮高)。

逐行简单解释如下:

#一堆注释,自己阅读,有助于英文提升!
AWK="awk"#定义变量awk

#GetFirstbootstrapObjectIDfromaccess/transaR_840_11845@.h
FirsTOBjeCTID=`grep'#define[]*FirstbootstrapObjectID'../access/transaR_840_11845@.h|$AWK'{print$3}'`
exportFirsTOBjeCTID#从../access/transaR_840_11845@.h文件中找到FirstbootstrapObjectID并取到它的值

#thispart(downtotheuniqstep)shouldmatchtheduplicate_oIDsscript
#note:weexcludeBKI_bootstraprelationssinCETheyareexpectedtohave
#matchingDATAlinesinpg_class.handpg_type.h
#将CATALOG(.*BKI_bootstrap这一行去掉是因为在pg_class.h和pg_type.h中DATA行肯定会匹配到这些OID

catpg_*.htoasTing.hindexing.h|\#从这些文件中查找
egrep-v-e'^CATALOG\(.*BKI_bootstrap'|\#去除CATALOG开头后面接(BKI_bootstrap的行
sed-n-e's/^DATA(insert*OID*=*\([0-9][0-9]*\).*$/\1/p'\
-e's/^CATALOG([^,]*,*\([0-9][0-9]*\).*BKI_ROWTYPE_OID(\([0-9][0-9]*\)).*$/\1,\2/p'\
-e's/^CATALOG([^,*\([0-9][0-9]*\).*$/\1/p'\
-e's/^DECLARE_INDEX([^,*\([0-9][0-9]*\).*$/\1/p'\
-e's/^DECLARE_UNIQUE_INDEX([^,*\([0-9][0-9]*\).*$/\1/p'\
-e's/^DECLARE_TOAST([^,*\([0-9][0-9]*\),*\([0-9][0-9]*\).*$/\1,\2/p'|\
#根据正则表达式匹配,并将行替换为oID(,oID)形式,其他无关字符去掉
tr',''\n'|\#将,替换为换行符
sort-n|\#对结果按数值排序
uniq|\#去掉临近的重复行
$AWK'#以下将上述内容使用awk用漂亮的方式显示出来(单独的直接显示,连续的用X-y方式,有多漂亮。。。)
BEGIN{
last=0;
}
/^[0-9]/{
if($1>last+1){
if($1>last+2){
printlast+1,"-",$1-1;
}else{
printlast+1;
}
}
last=$1;
}
END{
printlast+1,ENVIRON["FirsTOBjeCTID"]-1;

cat至结尾部分可以通过一步一步执行进行调试理解:

请逐一对使用到的linux命令进行学习,然后才能比较容易、深刻的理解!

要想进一步了解pg关于oID的源码(很有必要),请移步参中德哥网易博客!

linux sed

linux grep

linux awk

linux sort+uniq

OID源码分析by德哥

大佬总结

以上是大佬教程为你收集整理的查看未使用oid脚本unused_oids解析全部内容,希望文章能够帮你解决查看未使用oid脚本unused_oids解析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。