PostgreSql查询数据库中所有表基础信息,以及字段基础信息

背景

最近项目中需要获取不同类型数据源中所有表信息以及每张表的字段信息:
表名称,注释,所属数据库,所属模式,表占用空间大小
字段名称,注释,类型,长度,是否为主键

mysql中获取这些信息相对简单,postgre中需要使用一些内置函数(主要参考postgre中文手册)

获取表基础信息

SELECT
	"table_name",
	table_catalog,
	table_schema,
	pg_size_pretty ( pg_relation_size ( "table_name" ) ),
	obj_description ( oid, 'pg_class' ) 
FROM
	information_schema.tables t1,
	pg_class t2 
WHERE
	table_schema = 'public' 
	AND t1."table_name" = t2.relname;

表信息
以上查询的是当前库中’public’模式下所有表的基础信息,其中表大小用到的两个函数:
在这里插入图片描述
表注释使用的函数:
在这里插入图片描述
这些函数都可以在手册中进行搜索查看。

获取字段基础信息

SELECT
	base."column_name",
	col_description ( t1.oid, t2.attnum ),
	base.udt_name,
	COALESCE(character_maximum_length, numeric_precision, datetime_precision),
	(CASE
		WHEN ( SELECT t2.attnum = ANY ( conkey ) FROM pg_constraint WHERE conrelid = t1.oid AND contype = 'p' ) = 't' 
		THEN 1 ELSE 0 
	END ) 
FROM
	information_schema.COLUMNS base,
	pg_class t1,
	pg_attribute t2 
WHERE
	base."table_name" = 'sys_org' 
	AND t1.relname = base."table_name" 
	AND t2.attname = base."column_name" 
	AND t1.oid = t2.attrelid 
	AND t2.attnum > 0;

字段基础信息
以上查询的是’sys_org’表的字段信息,下面对各个属性进行解释。
使用到的表:
在这里插入图片描述
在这里插入图片描述
col_description函数在表注释那部分也出现了,这里查询字段注释时需要指定表id(pg_class.oid)以及行号(pg_attribute.attnum)。

COALESCE函数可以理解为mysql中的ifnull,在当前字段为null时展示下一个字段的内容,
这里用到的character_maximum_length, numeric_precision, datetime_precision
分别是字符、数字、时间类型的字段长度。
关于主键这部分相对复杂,单独列出来讲。

判断字段是不是主键

判断字段是否是主键主要用到了pg_constraint这张表
pg_constraint
其中contype为约束类型(p为主键约束),conrelid对应表id(pg_class.oid),
其中conkey存储的是字段行号数组,如果一张表有多个主键都会存在这一个字段中。
这样我们只需要找到表对应的主键约束信息,通过行号进行关联就行了。
最后使用any函数,判断数据是否包含在数组中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值