Мені потрібно отримати типи даних стовпців усіх стовпців у таблиці, включаючи типи геометрії. Що я хотів знати, чи є функція або 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.column. Тобто, у прикладі таблиці раніше я не використовував жодного numeric (15,2)типу даних, для якого потрібно було б використовувати інші атрибути (numeric_precision та numeric_scale), які будуть розбиратися CASE WHEN.
where attname = 'geog'але= 'geom'працює. Це дає хороші результати для значень MultiPolygon, Point та MultiPoint, але я не бачу нічого для типів Line або MultiLine. Вони вважаються багатокутниками?