PG数据库获取所有视图表及物化视图的列属性sql

发布时间 2023-11-01 17:59:44作者: _York
SELECT c.relname AS ""table_name"",a.attnum AS ""ordinal_position"", a.attname AS column_name, t.typname AS udt_name, 
       CASE WHEN t.typcategory = 'C' THEN a.atttypmod - 4 ELSE NULL END AS character_maximum_length,
       CASE WHEN t.typcategory = 'N' THEN (a.atttypmod - 4) >> 16 ELSE NULL END AS numeric_precision,
       CASE WHEN t.typcategory = 'N' THEN (a.atttypmod - 4) & 65535 ELSE NULL END AS numeric_scale
             ,case WHEN a.attnotnull='f' then 'YES' else 'NO' END AS  is_nullable
FROM pg_attribute AS a
JOIN pg_class AS c ON a.attrelid = c.oid
JOIN pg_type AS t ON a.atttypid = t.oid
WHERE c.relkind = 'm' -- 只查询物化视图
  AND lower(c.""relname"") = lower(@tableName)
  AND a.attnum > 0
    UNION ALL 
    SELECT ""table_name"" ,""ordinal_position"",""column_name"",""udt_name"",""character_maximum_length"",""numeric_precision"",""numeric_scale"",""is_nullable""
FROM information_schema.COLUMNS col where lower(""table_name"") = lower(@tableName)