Postgresql 表结构、列名相关信息查询

查询数据库拥有的表数量

sql 复制代码
select count(*)
from pg_class c join pg_namespace n on relnamespace = n.oid where relkind = 'r' and n.nspname = 'public' ;

查询所有表名及注释

sql 复制代码
-- 方法一
select relname, reltuples as rw,obj_description(c.oid)
from pg_class c join pg_namespace n on relnamespace = n.oid where relkind = 'r' and n.nspname = 'public';

-- 方法二 加条件 and relchecks=0是过滤掉分表
SELECT relname as tabname,
    cast(obj_description(relfilenode,'pg_class') as varchar) as comment 
FROM pg_class c 
WHERE relchecks=0 
AND relkind = 'r' 
AND relname not like 'pg_%' 
AND relname not like 'sql_%'
order by relname;

查询字段名、类型、注释、是否为空

sql 复制代码
SELECT 
    col_description(a.attrelid,a.attnum) as comment,
    format_type(a.atttypid,a.atttypmod) as type,
    a.attname as name, 
    a.attnotnull as notnull   
FROM pg_class as c,pg_attribute as a 
where c.relname = '表名' 
and a.attrelid = c.oid 
and a.attnum>0;

查询表字段(详细版):列名、备注、类型、是否为空、长度、是否为主键

sql 复制代码
select a.attname as colname,	col_description(a.attrelid,a.attnum) as remarks,t.typname,a.attnotnull as notnull ,
(case when atttypmod-4>0 then atttypmod-4 else 0 end) len,
(case  when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and contype='p')>0  
	then 'Y' else 'N' end) as primarykey
from pg_attribute a left join pg_class c on a.attrelid = c.oid
left join pg_type t on a.atttypid = t.oid
where	a.attnum >= 0 and c.relname = '表名'
order by c.relname desc,	a.attnum asc

查询表和表字段(表名和列的详细信息的融合)

sql 复制代码
select ROW_NUMBER() over(ORDER bY c.relname ,	a.attnum asc ) AS	 num,
 c.relname as 英文表名,
 de.description  as 中文表名,
a.attname as 英文字段名称,	
col_description(a.attrelid,a.attnum) as 中文字段名称,
t.typname 字段类型,
(case when atttypmod-4>0 then atttypmod-4 else 0 end) 字段长度,
'0' 字段小数位数,
(case when a.attnotnull='t' THEN	'是' ELSE	'否' END )  字段是否非空,
(case  when (select count(*) from pg_constraint where conrelid = a.attrelid 
and conkey[1]=attnum and contype='p')>0  	then '是' else '否' end)  字段是否主键,
'该字段为'||col_description(a.attrelid,a.attnum) as 字段描述
from pg_attribute a 
left join pg_class c on a.attrelid = c.oid
left join pg_type t on a.atttypid = t.oid
left outer join pg_namespace pn on c.relnamespace = pn.oid
left join ( select pd.*
    from pg_description pd
    where 1=1
        and pd.objsubid = 0 ) de on c.oid = de.objoid 
where	a.attnum >= 0 
and relchecks=0 
and relkind in ('r','v','m','f','p')
and pn.nspname not in ('pg_catalog','information_schema') 
        and pn.nspname not like 'pg_toast%'
order by c.relname ,	a.attnum asc;
相关推荐
萤丰信息7 分钟前
开启园区“生命体”时代——智慧园区系统,定义未来的办公与生活
java·大数据·运维·数据库·人工智能·生活·智慧园区
利兄的视界10 分钟前
一步到位:M4 芯片 Mac 安装 PostgreSQL 16 并适配 pgvector 教程
后端·postgresql
TDengine (老段)27 分钟前
TDengine Rust 连接器进阶指南
大数据·数据库·物联网·rust·时序数据库·tdengine·涛思数据
二哈喇子!32 分钟前
MySQL数据库操作命令【SQL语言】
数据库·sql·视图与索引
China_Yanhy34 分钟前
AWS S3 深度配置指南:每一栏每个选项有什么作用
java·数据库·aws
yong999038 分钟前
基于MATLAB的大变形悬臂梁求解程序
前端·数据库·matlab
施嘉伟40 分钟前
Oracle SQL Profile 固化执行计划实战说明
数据库·sql·oracle
Dr.Alex Wang1 小时前
Google Firebase 实战教学 - Streamlit、Bucket、Firebase
数据库·python·安全·googlecloud
程序 代码狂人1 小时前
SQL-速查表:NULL 相关函数对比
数据库·sql
kaico20181 小时前
MYSQL的日志文件
数据库·mysql