暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

获取postgresql数据字典

追梦IT人 2022-07-21
546

想实现一个通用的元数据,从postgresql入手,在网文的基础上增加了一些字段信息,字段元数据主要包括表名、字段名、字段顺序、字段类型、字段全类型、字段长度、数值字段长度、数值字段精度、字段备注等等。

虽然还可以叠加很多比如索引、外键等等

  1. SELECT

  2. pc.relname AS tableName,

  3. pa.attname AS columnName,

  4. pa.attnum AS columnorder,

  5. pt.typname AS columnType,

  6. concat_ws(

  7. '',

  8. pt.typname,

  9. SUBSTRING(

  10. format_type(pa.atttypid, pa.atttypmod) from '\(.*\)'

  11. )

  12. ) as 列类型, (CASE WHEN pa.attlen > 0 THEN pa.attlen ELSE pa.atttypmod -

  13. 4 END) AS columnLength,

  14. pa.attnotnull AS isNullAble, (CASE WHEN(SELECT COUNT( * ) FROM pg_constraint WHERE conrelid =

  15. pa.attrelid AND conkey[1] = attnum AND contype = 'p') > 0 THEN TRUE ELSE FALSE END) AS isPrimary,

  16. pd.description AS columnDescription,

  17. CASE atttypid

  18. WHEN 21 /*int2*/ THEN 16

  19. WHEN 23 /*int4*/ THEN 32

  20. WHEN 20 /*int8*/ THEN 64

  21. WHEN 1700 /*numeric*/ THEN

  22. CASE WHEN atttypmod = -1

  23. THEN null

  24. ELSE((atttypmod - 4) >> 16) & 65535--calculate the precision

  25. END

  26. WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/

  27. WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/

  28. ELSE null

  29. END AS numeric_precision,

  30. CASE

  31. WHEN atttypid IN(21, 23, 20) THEN 0

  32. WHEN atttypid IN(1700) THEN

  33. CASE

  34. WHEN atttypmod = -1 THEN null

  35. ELSE(atttypmod - 4) & 65535--calculate the scale

  36. END

  37. ELSE null

  38. END AS numeric_scale

  39. FROM

  40. pg_class pc,

  41. pg_attribute pa,

  42. pg_type pt,

  43. pg_description pd

  44. WHERE pc.oid = pa.attrelid

  45. AND pt.oid = pa.atttypid

  46. AND pd.objoid = pa.attrelid

  47. AND pd.objsubid = pa.attnum

  48. --AND pc.relname = 'table_name'

  49. ORDER BY pc.relname DESC, pa.attnum ASC


欢迎关注python与大数据分析


文章转载自追梦IT人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论