Necesito obtener los tipos de datos de columna de todas las columnas en una tabla, incluidos los tipos de geometría. Lo que quería saber es si hay una función o SQL que proporcione algo como esto:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
De algunas respuestas en stackexchange y gis.stackexchange sé que puedo obtener parte de la información con la siguiente consulta:
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'
Resultado:
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
Pero, ¿hay una forma más práctica y adecuada de recuperar la información en el formato que necesito? ¿O debo ingresar al "mundo" de CASE WHENestructuras y concatenación de cadenas para reunir todos los atributos de columna en una sola columna en ese formato?
Mi temor es si un tipo de datos no esperado me sorprende al necesitar otro atributo de la tabla information_schema.columns. Es decir, en la tabla de ejemplo anterior, no usé ningún numeric (15,2)tipo de datos, que necesitaría usar otros atributos (numeric_precision y numeric_scale) para ser analizados por CASE WHEN.
where attname = 'geog'pero= 'geom'funciona. Esto me da buenos resultados para los valores MultiPolygon, Point y MultiPoint, pero no veo nada para los tipos Line o MultiLine. ¿Se consideran los polígonos?