J'ai besoin d'obtenir les types de données de colonne de toutes les colonnes d'une table, y compris les types de géométrie. Ce que je voulais savoir, c'est s'il existe une fonction ou SQL qui donne quelque chose comme ceci:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
À partir de quelques réponses sur stackexchange et gis.stackexchange, je sais que je peux obtenir certaines informations avec la requête suivante:
SELECT
g.column_name,
g.data_type,
g.character_maximum_length,
g.udt_name,
f.type,
f.srid
FROM
information_schema.columns as g JOIN
geometry_columns AS f
ON (g.table_schema = f.f_table_schema and g.table_name = f.f_table_name )
WHERE
table_schema = 'my_schema_name' and
table_name = 'my_table_name'
Résultat:
column_name | data_type | character_maximum_length | udt_name | type | srid
------------+-------------------+--------------------------+----------+---------+------
gid | integer | | | |
descr | character varying | 32 | | |
class | character varying | 10 | | |
area | double precision | |
geom | USER-DEFINED | | geometry | Polygon | 3763
Mais, existe-t-il un moyen plus pratique et approprié de récupérer les informations dans le format dont j'ai besoin? Ou dois-je entrer dans le "monde" des CASE WHENstructures et de la concaténation de chaînes pour rassembler tous les attributs de colonne dans une seule colonne dans ce format?
Ma crainte est qu'un type de données non attendu me surprenne en ayant besoin d'un autre attribut de la table information_schema.columns. C'est-à-dire que dans l'exemple de tableau précédent, je n'ai utilisé aucun numeric (15,2)type de données, qui aurait besoin d'utiliser un autre attribut (numeric_precision et numeric_scale) pour être analysé par un CASE WHEN.
where attname = 'geog'mais= 'geom'fonctionne. Cela me donne de bons résultats pour les valeurs MultiPolygon, Point et MultiPoint mais je ne vois rien pour les types Line ou MultiLine. Sont-ils considérés comme des polygones?