Saya perlu mendapatkan tipe data kolom dari semua kolom dalam tabel, termasuk tipe geometri. Yang ingin saya ketahui adalah apakah ada fungsi atau SQL yang memberikan sesuatu seperti ini:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
Dari beberapa jawaban di stackexchange dan gis.stackexchange saya tahu bahwa saya bisa mendapatkan beberapa informasi dengan query berikut:
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'
Hasil:
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
Tetapi, adakah cara yang lebih praktis dan tepat untuk mengambil informasi dalam format yang saya butuhkan? Atau haruskah saya memasuki "dunia" CASE WHENstruktur dan rangkaian string untuk mengumpulkan semua atribut kolom dalam satu kolom tunggal dalam format itu?
Ketakutan saya adalah jika tipe data yang tidak diharapkan mengejutkan saya dengan memerlukan atribut lain dari tabel information_schema.columns. Yaitu, dalam tabel contoh sebelumnya, saya tidak menggunakan numeric (15,2)tipe data apa pun , yang perlu menggunakan atribut lain (numeric_precision dan numeric_scale) untuk diuraikan oleh KASUS KETIKA.
where attname = 'geog'tetapi= 'geom'berhasil. Ini memberi saya hasil yang baik untuk nilai MultiPolygon, Point dan MultiPoint tapi saya tidak melihat apa pun untuk tipe Line atau MultiLine. Apakah itu dianggap poligon?