Postgresql 查询所有模式、根据模式查询表名及根据表名查询字段信息

Postgresql 根据模式所有表的名称及字段信息


项目开发中,为了方便公共查询接口,会将数据表和字段等信息配置存储起来,提供给属性查询、空间查询、缓存分析等使用,因此查询所有表名和查询表字段属性sql比较常用,这里记录一下。

查询所有模式

SELECT
	pn.oid AS schema_oid,
	iss.CATALOG_NAME,
	iss.schema_owner,
	iss.SCHEMA_NAME 
FROM
	information_schema.schemata iss
	INNER JOIN pg_namespace pn ON pn.nspname = iss.SCHEMA_NAME;

查询结果:
在这里插入图片描述

根据模式名查询表名

根据表名查询当前模式下的所有表名以及中文注释:

SELECT DISTINCT
	"table_name",
	obj_description ( oid, 'pg_class' ) AS table_alias 
FROM
	information_schema.tables t1,
	pg_class t2 
WHERE
	table_schema = '模式名称' 
	AND t1."table_name" = t2.relname

查询结果:
在这里插入图片描述

根据表名查询字段

根据表名查询字段属性,包括字段名、别名、类型、长度、主键等。

SELECT A
	.attname AS field_name,-- 字段名
	col_description ( A.attrelid, A.attnum ) AS field_alias,-- 字段别名
	format_type ( A.atttypid, A.atttypmod ) AS field_type,-- 字段类型
	( CASE WHEN atttypmod - 4 > 0 THEN atttypmod - 4 ELSE 0 END ) field_length,-- 字段长度
	(
	CASE
			WHEN ( SELECT COUNT ( conname ) FROM pg_constraint WHERE conrelid = A.attrelid AND conkey [ 1 ]= attnum AND contype = 'p' ) > 0 THEN
			'Y' ELSE'N' 
		END 
		) AS primary_key,-- 是否主键
	CASE
			A.attnotnull 
			WHEN 't' THEN
			'Y' ELSE'N' 
		END AS is_null -- 是否为空
		
	FROM
		pg_attribute A 
	WHERE
	attstattarget =- 1 
	AND attrelid = ( SELECT oid FROM pg_class WHERE relname = '表名' LIMIT 1 ) -- 这里限制一条记录,否则存在多个表名可能会引起报错)

查询结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非科班Java出身GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值