Jak uzyskać typ danych określonego pola z tabeli w postgres? Na przykład mam następującą tabelę student_details (stu_id integer, stu_name varchar (30), join_date timestamp);
W tym przypadku używając nazwy pola / lub w jakikolwiek inny sposób, muszę uzyskać typ danych określonego pola. Czy jest taka możliwość?
postgresql
Nathan Villaescusa
źródło
źródło
Odpowiedzi:
Możesz pobrać typy danych ze schematu information_schema (przywoływane tutaj dokumenty 8.4, ale nie jest to nowa funkcja):
źródło
where table_catalog = ? and table_schema = ? and table_name = ?;
ale ten widok schematu information_schema nie uwzględnia, że DDL mógł używać domen .pg_typeof
Możesz użyć funkcji pg_typeof () , która działa również dobrze dla dowolnych wartości.
źródło
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
prawdopodobnie różni się od tego, czego można się spodziewać.pg_typeof
działa dla pól wychodzących z procedur składowanych, dla których tabela zaplecza, jeśli w ogóle istnieje, jest nieznana / niejasna.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn()
. information_schema niewiele by tu pomogło.Spróbuj tego żądania:
źródło
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
biegnij,
psql -E
a potem\d student_details
źródło
Jeśli podoba Ci się rozwiązanie `` Mike Sherrill '', ale nie chcesz używać psql, użyłem tego zapytania, aby uzyskać brakujące informacje:
z wynikiem:
źródło
Widoki schematu informacji i pg_typeof () zwracają niekompletne informacje o typie. Spośród tych odpowiedzi
psql
najdokładniejsze informacje dotyczące typu. (PO może nie potrzebować tak dokładnych informacji, ale powinien znać ograniczenia.)Użycie
psql
i\d public.test
poprawnie pokazuje użycie typu danychtest_domain
, długość kolumn varchar (n) oraz dokładność i skalę kolumn liczbowych (p, s).To zapytanie skierowane do widoku information_schema w ogóle nie pokazuje użycia
test_domain
. Nie przedstawia również szczegółów kolumn varchar (n) i liczbowych (p, s).Państwo może być w stanie uzyskać wszystkie te informacje, łącząc inne poglądy information_schema lub poprzez wysłanie zapytania do tabel systemowych bezpośrednio.
psql -E
może w tym pomóc.Funkcja
pg_typeof()
poprawnie pokazuje użycietest_domain
, ale nie zgłasza szczegółów kolumn varchar (n) i liczbowych (p, s).źródło
Pobieranie typu danych z
information_schema
jest możliwe, ale nie jest wygodne (wymaga połączenia kilku kolumn za pomocącase
instrukcji). Alternatywnie można do tego użyć funkcjiformat_type
wbudowanej, ale działa ona na wewnętrznych identyfikatorach typów, które są widoczne w programie,pg_attribute
ale nie w programieinformation_schema
. PrzykładNa podstawie https://gis.stackexchange.com/a/97834 .
źródło
b.relfilenode
zb.oid