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)