查找数据库中的所有字段的信息( 二 )


小黄来更新啦!至今还没有解决SQL 索引的问题,但又遇到一个新的问题,简直就是一波未平一波又起!!!
情况大致就是上面这么个情况,多了一个系统使用的是pgsql的数据管理系统,这可把小黄整懵了,上述三个数据系统大多都是有所耳闻,这个是我见识短浅,听都没听过 。还是面向百度解决问题,让我们看看小黄是如何解决的
pgsql解决方案
【查找数据库中的所有字段的信息】小黄经过一早上的努力还是完全解决,没办法将索引表和字段表关联,希望大佬能帮我解决以下
总结一下经验,我们主表一般都选择用字段来呈现,所以我们考虑查询一下字段信息
SELECT * FROM pg_attribute
调用以上方法可以得到数据库中所有的字段
那我们可以重新理一下sql语句
SELECT * FROM pg_attribute where attnum > 0
接下来我们先将表ID进行关联,以下是查找表的代码
这里要着重讲一下系统字段,在字段表和表名表进行关联的时候
关联条件是 字段表. = 表名表.oid
而oid是需要显示定义的,直接查询时无法显示系统字段的
SELECT C.oid,* FROMpg_class C WHERErelkind = 'r' AND relname NOT LIKE'pg_%' AND relname NOT LIKE'sql_%'
这里需要注意的时字段,我们可以来看一下官方文档官方文档
我们需要的是普通表,所以将值为r的筛选出来
而表名中pg开头的值和sql开头的值对应的都是系统表,我们也不需要
接下来我们需要解决的是字段类型
SELECTt.oid,* FROMpg_typet
再者就是解决字段备注的语句,调用以下方法
SELECT * FROMpg_descriptiond
pgsql的部分解决方案
SELECT C.relname 表名,cast(obj_description(relfilenode,'pg_class') as varchar) AS "表名描述",A.attname 字段名,t.typname as "字段类型",d.description AS "字段备注",(casewhen (selectcount(pg_constraint.*)frompg_constraintinner join pg_class onpg_constraint.conrelid = pg_class.oidinner join pg_attribute onpg_attribute.attrelid = pg_class.oidand pg_attribute.attnum = any(pg_constraint.conkey)inner join pg_type onpg_type.oid = pg_attribute.atttypidwherepg_class.relname = c.relnameand pg_constraint.contype = 'p'and pg_attribute.attname = a.attname) > 0 then trueelse false end) as 是否主键FROMpg_attribute A LEFT JOIN ( SELECT c.oid,* FROM pg_class C WHERE relkind = 'r' AND relname NOT LIKE'pg_%' AND relname NOT LIKE'sql_%' ) CON A.attrelid = C.oid left join (SELECTt.oid,* FROMpg_typet) Tona.atttypid = t.oidleft join (SELECT * FROMpg_descriptiond) Don d.objoid=a.attrelid and d.objsubid=a.attnumWHEREc.relname is not nullanda.attnum > 0order by C.relname