Eu preciso obter os tipos de dados da coluna de todas as colunas em uma tabela, incluindo os tipos de geometria. O que eu queria saber é se existe uma função ou SQL que fornece algo como isto:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
De algumas respostas sobre Stackexchange e gis.stackexchange Eu sei que eu posso conseguir algumas informações com a seguinte 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
Mas, existe uma maneira mais prática e adequada de recuperar as informações no formato necessário? Ou devo entrar no "mundo" de CASE WHEN
estruturas e concatenação de cadeias para reunir todos os atributos da coluna em uma única coluna nesse formato?
Meu medo é que um tipo de dados não esperado me surpreenda ao precisar de outro atributo da tabela information_schema.columns. Ou seja, na tabela de exemplo anterior, eu não usei nenhum numeric (15,2)
tipo de dado, que precisaria usar outros atributos (numeric_precision e numeric_scale) para serem analisados por um CASE WHEN.
where attname = 'geog'
mas= 'geom'
funciona. Isso me dá bons resultados para os valores MultiPolygon, Point e MultiPoint, mas não vejo nada para os tipos de linha ou multilinha. São considerados polígonos?