PostgreSQL 统计某库下各表字段类型对应定义的长度

#!/bin/bash

db_name=库名
pgsql(){
  PGPASSWORD=A7GaKXT3JEY3_Qrh /usr/bin/psql -U postgres -d ${db_name} -p 5432 -Atc "$@"
}

desc(){
  for table_name in `pgsql "\dt+"|awk -F '|' '{print $2}'`;do
    for field in `pgsql "\dS+ $table_name"|awk -F '|' '{print $1}'`;do
      typeAndLen=$(pgsql "\dS+ $table_name"|awk -v field=$field -F '|' '
BEGIN{map["bigint"]=64;map["integer"]=32;map["smallint"]=16;map["timestamp"]=64;map["text"]=10485760;map["boolean"]=8}
$1 == field{split($2,arr," ");match($2,/.*\(([0-9]+)\)/,am);
if(map[arr[1]]==null && am[1]==null){if($2=="character varying"){lens=10485760}else{lens="--"}}else if(am[1]!=null){lens=am[1]}else{lens=map[arr[1]]}
if($2 ~ /character varying/){type="varchar"}else{type=arr[1]}}
END{print field,type,lens}
')
echo "${table_name} ${typeAndLen}"
    done
  done
}

desc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值