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 WHEN
Strukturen 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?Es kann mit einer einfachen SQL-Abfrage abgerufen werden.
SELECT * from information_schema.columns where table_name='mytablename'
quelle
\pset pager
Schalten Sie die Seite aus und\x
aktivieren Sie dann die erweiterte Anzeige.Mit Paul Ramseys Hilfe habe ich es so gemacht:
AKTUALISIEREN
In der Zwischenzeit habe ich eine Funktion erstellt, um nach einem bestimmten Spaltendatentyp zu fragen
Die Verwendung ist:
quelle
Wenn Sie den Geometrietyp überprüfen möchten, können Sie 'udt_name' in 'INFORMATION_SCHEMA.COLUMNS' überprüfen und verwenden!:
select column_name,udt_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name =g
quelle