Tôi cần lấy các kiểu dữ liệu cột của tất cả các cột trong một bảng, bao gồm các kiểu hình học. Những gì tôi muốn biết là nếu có một hàm hoặc SQL cung cấp một cái gì đó như thế này:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
Từ một vài câu trả lời trên stackexchange và gis.stackexchange tôi biết rằng tôi có thể nhận được một số thông tin với truy vấn sau:
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'
Kết quả:
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
Nhưng, có cách nào thực tế hơn để lấy thông tin theo định dạng tôi cần không? Hoặc tôi phải nhập "thế giới" CASE WHENcấu trúc và nối chuỗi để thu thập tất cả các thuộc tính cột trong một cột theo định dạng đó?
Nỗi sợ hãi của tôi là nếu một loại dữ liệu không mong đợi làm tôi ngạc nhiên khi cần thuộc tính khác từ bảng information_schema.columns. Tức là, trong bảng ví dụ trước đây, tôi không sử dụng bất kỳ numeric (15,2)loại dữ liệu nào , mà sẽ cần sử dụng một thuộc tính khác (num_precision và num_scale) để được phân tích cú pháp bởi CASE WHEN.
where attname = 'geog'nhưng= 'geom'không hoạt động. Điều này mang lại cho tôi kết quả tốt cho các giá trị MultiPolygon, Point và MultiPoint nhưng tôi không thấy gì cho các loại Line hoặc MultiLine. Là những người được coi là đa giác?