Potrzebuję uzyskać typy danych kolumn dla wszystkich kolumn w tabeli, w tym typy geometrii. Chciałem wiedzieć, czy istnieje funkcja lub SQL, który daje coś takiego:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
Od kilku odpowiedzi na Stack Exchange Network i gis.stackexchange wiem, że mogę uzyskać pewne informacje z następującym zapytaniem:
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'
Wynik:
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
Ale czy jest jakiś bardziej praktyczny sposób na uzyskanie informacji w wymaganym formacie? Czy też muszę wejść w „świat” CASE WHEN
struktur i konkatenacji ciągów, aby zebrać wszystkie atrybuty kolumn w jednej kolumnie w tym formacie?
Obawiam się, że niespodziewany typ danych zaskoczy mnie potrzebą innego atrybutu z tabeli information_schema.columns. Tj. W poprzedniej tabeli nie użyłem żadnego numeric (15,2)
typu danych, który musiałby użyć innych atrybutów (precyzja numeryczna i skala numeryczna), aby zostały przeanalizowane przez PRZYKŁAD.
where attname = 'geog'
ale= 'geom'
działa. Daje mi to dobre wyniki dla wartości MultiPolygon, Point i MultiPoint, ale nie widzę nic dla typów Line lub MultiLine. Czy są to wielokąty?Można go uzyskać za pomocą prostego zapytania SQL.
SELECT * from information_schema.columns where table_name='mytablename'
źródło
\pset pager
aby wyłączyć stronę, a następnie\x
włączyć rozwinięty ekran.Z pomocą Paula Ramseya zrobiłem to w ten sposób:
AKTUALIZACJA
W międzyczasie utworzyłem funkcję z pytaniem o określony typ danych kolumny
Wykorzystanie jest:
źródło
jeśli chcesz sprawdzić typ geometrii, możesz zaznaczyć „udt_name” w „INFORMACJE_SCHEMA.KOLUMNY” i użyć go !:
select column_name,udt_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name =g
źródło