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 WHEN
estructuras 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?Se puede obtener usando una simple consulta SQL.
SELECT * from information_schema.columns where table_name='mytablename'
fuente
\pset pager
apagar la página y luego\x
habilitar la pantalla expandida.Con la ayuda de Paul Ramsey, lo hice de esta manera:
ACTUALIZAR
Mientras tanto, he creado una función para solicitar un determinado tipo de datos de columna
El uso es:
fuente
si desea verificar el tipo de geometría, puede marcar 'udt_name' en 'INFORMATION_SCHEMA.COLUMNS' y usarlo:
select column_name,udt_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name =g
fuente