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 WHEN
structures 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?Il peut être obtenu en utilisant une simple requête SQL.
SELECT * from information_schema.columns where table_name='mytablename'
la source
\pset pager
désactiver la page, puis\x
activer l'affichage étendu.Avec l' aide de Paul Ramsey, je l'ai fait de cette façon:
MISE À JOUR
Pendant ce temps, j'ai créé une fonction pour demander un certain type de données de colonne
L'utilisation est:
la source
si vous voulez vérifier le type de géométrie, vous pouvez cocher 'udt_name' dans 'INFORMATION_SCHEMA.COLUMNS' et l'utiliser!:
select column_name,udt_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name =g
la source