ฉันต้องการรับชนิดข้อมูลคอลัมน์ของคอลัมน์ทั้งหมดในตารางรวมถึงชนิดรูปทรงเรขาคณิต สิ่งที่ฉันอยากรู้คือถ้ามีฟังก์ชั่นหรือ 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 มีการพิจารณารูปหลายเหลี่ยมเหล่านั้นหรือไม่