Je pense que tu es très proche. La dernière étape serait de joindre avec pg_type
:
join pg_catalog.pg_type as tp on tp.oid = attr.atttypid
Le champ tp.typname
aurait le type de données.
La requête suivante obtient les types de données de colonne en utilisant l'espace de noms (par exemple, le schéma) et le nom de la relation (par exemple, la vue matérialisée) :
select
attr.attnum,
ns.nspname as schema_name,
cls.relname as table_name,
attr.attname as column_name,
tp.typname as datatype
from pg_catalog.pg_attribute as attr
join pg_catalog.pg_class as cls on cls.oid = attr.attrelid
join pg_catalog.pg_namespace as ns on ns.oid = cls.relnamespace
join pg_catalog.pg_type as tp on tp.oid = attr.atttypid
where
ns.nspname = 'your_schema'
and cls.relname = 'your_materialized_view'
and attr.attnum >= 1
order by
attr.attnum
Vous devez changer 'your_schema'
et 'your_materialized_view'
.