我需要获取表中所有列的列数据类型,包括几何类型。我想知道的是,是否存在提供类似以下内容的函数或SQL:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
从这几个答案stackexchange和gis.stackexchange我知道,我可以得到一些与下面的查询的信息:
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'
结果:
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
但是,是否有合适的更实用的方法来检索所需格式的信息?还是我必须进入CASE WHEN结构和字符串串联的“世界”,以该格式将所有列属性收集到一个列中?
我担心的是,如果非预期的数据类型需要来自information_schema.columns表中的其他属性,会使我感到惊讶。也就是说,在之前的示例表中,我没有使用任何numeric (15,2)数据类型,而将需要使用另一个属性(numeric_precision和numeric_scale)来由CASE WHEN进行解析。
where attname = 'geog'但是= 'geom'可以工作。这为MultiPolygon,Point和MultiPoint值提供了良好的结果,但是对于Line或MultiLine类型我什么也看不到。那些被认为是多边形吗?