Wie erhalte ich den Datentyp eines bestimmten Felds aus einer Tabelle in Postgres? Zum Beispiel habe ich die folgende Tabelle: student_details (stu_id integer, stu_name varchar (30), join_date timestamp);
In diesem Fall muss ich unter Verwendung des Feldnamens / oder auf andere Weise den Datentyp des spezifischen Felds abrufen. Gibt es eine Möglichkeit ?
postgresql
Nathan Villaescusa
quelle
quelle
Antworten:
Sie können Datentypen aus dem information_schema abrufen (8.4 Dokumente, auf die hier verwiesen wird, dies ist jedoch keine neue Funktion):
quelle
where table_catalog = ? and table_schema = ? and table_name = ?;
In dieser Ansicht information_schema wird jedoch nicht berücksichtigt, dass die DDL möglicherweise Domänen verwendet hat .pg_typeof
Sie können die Funktion pg_typeof () verwenden, die auch für beliebige Werte gut funktioniert.
quelle
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
wahrscheinlich anders als erwartet.pg_typeof
für Felder funktioniert, die aus gespeicherten Prozeduren stammen, für die die Backend-Tabelle, falls sie überhaupt existiert, unbekannt / unklar ist.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn()
. information_schema würde hier nicht viel helfen.Versuchen Sie diese Anfrage:
quelle
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
laufen
psql -E
und dann\d student_details
quelle
Wenn Sie die Lösung 'Mike Sherrill' mögen, aber keine psql verwenden möchten, habe ich diese Abfrage verwendet, um die fehlenden Informationen abzurufen:
mit Ergebnis:
quelle
Die Informationsschemaansichten und pg_typeof () geben unvollständige Typinformationen zurück. Gibt von diesen Antworten
psql
die genauesten Typinformationen. (Das OP benötigt möglicherweise keine so genauen Informationen, sollte jedoch die Einschränkungen kennen.)Verwendung
psql
und\d public.test
zeigt korrekte Verwendung des Datentypstest_domain
, der Länge der VARCHAR (n) Spalten, und die Präzision und den Umfang der numerischen (p, n) Spalten.Diese Abfrage für eine information_schema-Ansicht zeigt die Verwendung von überhaupt nicht
test_domain
an. Es werden auch keine Details zu varchar (n) und numerischen (p, s) Spalten gemeldet.Sie könnten der Lage sein , alle diese Informationen zu erhalten , indem andere information_schema Ansichten Beitritt oder durch direkt die Systemtabellen abfragen.
psql -E
könnte dabei helfen.Die Funktion
pg_typeof()
zeigt die Verwendung vontest_domain
varchar (n) und numerischen (p, s) Spalten korrekt an , meldet jedoch nicht die Details.quelle
Das Abrufen des Datentyps von
information_schema
ist möglich, aber nicht bequem (erfordert das Verknüpfen mehrerer Spalten mit einercase
Anweisung). Alternativ kann man dieformat_type
eingebaute Funktion verwenden, dies funktioniert jedoch mit internen Typkennungen, die in,pg_attribute
aber nicht in sichtbar sindinformation_schema
. BeispielBasierend auf https://gis.stackexchange.com/a/97834 .
quelle
b.relfilenode
durchb.oid