Devo ottenere i tipi di dati di colonna di tutte le colonne in una tabella, inclusi i tipi di geometria. Quello che volevo sapere è se esiste una funzione o SQL che dà qualcosa del genere:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
Da alcune risposte su stackexchange e gis.stackexchange so che posso ottenere alcune delle informazioni con la seguente query:
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'
Risultato:
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
Ma esiste un modo più pratico per recuperare le informazioni nel formato di cui ho bisogno? O devo entrare nel "mondo" di CASE WHEN
strutture e concatenazione di stringhe per raccogliere tutti gli attributi di colonna in un'unica colonna in quel formato?
La mia paura è che se un tipo di dati non previsto mi sorprende necessitando di altri attributi dalla tabella information_schema.columns. Vale a dire, nella tabella di esempio prima, non ho usato alcun numeric (15,2)
tipo di dati, che avrebbe bisogno di usare altri attributi (numeric_precision e numeric_scale) per essere analizzato da CASE WHEN.
where attname = 'geog'
ma= 'geom'
funziona. Questo mi dà buoni risultati per i valori MultiPolygon, Point e MultiPoint ma non vedo nulla per i tipi Line o MultiLine. Sono considerati poligoni?