Ich muss die Spaltendatentypen aller Spalten in einer Tabelle abrufen, einschließlich der Geometrietypen. Was ich wissen wollte ist, ob es eine Funktion oder SQL gibt, die so etwas gibt:
column_name | data_type
------------+--------------
gid | integer
descr | character varying(32)
class | character varying(10)
area | double precision
geom | geometry(Polygon,3763)
Aus einigen Antworten zu stackexchange und gis.stackexchange weiß ich, dass ich einige der Informationen mit der folgenden Abfrage erhalten kann:
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'
Ergebnis:
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
Aber gibt es eine praktischere Möglichkeit, die Informationen in dem von mir benötigten Format abzurufen? Oder muss ich in die "Welt" der CASE WHENStrukturen und der Verkettung von Zeichenfolgen eintreten , um alle Spaltenattribute in einer einzigen Spalte in diesem Format zu erfassen?
Ich befürchte, wenn mich ein nicht erwarteter Datentyp überrascht, indem er ein anderes Attribut aus der Tabelle information_schema.columns benötigt. Das heißt, in der numeric (15,2)vorherigen Beispieltabelle habe ich keinen Datentyp verwendet, der andere Attribute (numeric_precision und numeric_scale) verwenden müsste, um von einem CASE WHEN analysiert zu werden.
where attname = 'geog'aber= 'geom'es funktioniert. Dies gibt mir gute Ergebnisse für MultiPolygon-, Punkt- und MultiPoint-Werte, aber ich sehe nichts für Linien- oder MultiLine-Typen. Werden diese als Polygone betrachtet?