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 WHEN
struktur 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?Itu bisa menggunakan query SQL sederhana.
SELECT * from information_schema.columns where table_name='mytablename'
sumber
\pset pager
untuk mematikan halaman, kemudian\x
untuk mengaktifkan tampilan yang diperluas.Dengan bantuan Paul Ramsey saya berhasil seperti ini:
MEMPERBARUI
Sementara itu saya telah membuat fungsi untuk meminta tipe data kolom tertentu
Penggunaannya adalah:
sumber
jika Anda ingin memeriksa jenis geometri, Anda dapat memeriksa 'udt_name' di 'INFORMATION_SCHEMA.COLUMNS' dan menggunakannya !:
select column_name,udt_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name =g
sumber