ジオメトリタイプを含む、テーブル内のすべての列の列データタイプを取得する必要があります。私が知りたかったのは、次のような関数または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構造と文字列連結の「世界」を入力して、その形式で1つの列にすべての列属性を収集する必要がありますか?
私の恐れは、予期しないデータ型がinformation_schema.columnsテーブルの他の属性を必要とすることで私を驚かせるかどうかです。つまり、前の例の表ではnumeric (15,2)、CASE WHENで解析するために別の属性(numeric_precisionおよびnumeric_scale)を使用する必要があるデータ型を使用していませんでした。
where attname = 'geog'が、= 'geom'機能します。これにより、MultiPolygon、Point、およびMultiPointの値に良い結果が得られますが、LineまたはMultiLineタイプには何も表示されません。それらはポリゴンと見なされますか?