W PostgreSQL pg_typeof()
funkcja pozwala uzyskać typ danych o dowolnej wartości.
Dokładniej, zwraca OID typu danych wartości, która jest do niego przekazywana. Zwraca regtype
, który jest typem aliasu OID. Dlatego jest to to samo, co OID do celów porównawczych, ale wyświetla się jako nazwa typu.
Składnia
Funkcja ma następującą składnię:
pg_typeof(any)
Gdzie any
ma jakąkolwiek wartość.
Przykład
Oto podstawowy przykład do zademonstrowania.
SELECT pg_typeof(100);
Wynik:
integer
Dowolne ciągi
W Postgresie istnieje więcej niż jeden typ ciągu (np. char
, varchar
, text
). Dlatego nie możesz po prostu otoczyć argumentu pojedynczymi cudzysłowami i oczekiwać, że będzie wiedział, jaki jest jego typ danych.
SELECT pg_typeof('Elephant');
Wynik:
unknown
Dlatego musisz określić jego rzeczywisty typ danych.
SELECT pg_typeof('Elephant'::varchar);
Wynik:
character varying
W Postgresie character varying
to nazwa dla varchar
(właściwie varchar
jest aliasem character varying
).
Ten ostatni przykład był trochę zbędny, ponieważ wyraźnie określiłem typ zmiennej, co oznaczało, że już wiedziałem, jaki będzie wynik.
W prawdziwym świecie jest bardziej prawdopodobne, że będziesz próbował uzyskać typ danych zmiennej.
Typ zwrotu zmiennej
W tym przykładzie wstawiam poprzedni ciąg do zmiennej, a następnie pobieram jej typ danych.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Wynik:
NOTICE: Value: Elephant Type: character varying
Oto znowu, z wyjątkiem tego, że zmieniam typ danych na inny typ ciągu (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Wynik:
NOTICE: Value: Elephant Type: character
Wartości logiczne
Oto przykład wyraźnego podania wartości logicznej.
SELECT
pg_typeof(true),
pg_typeof(false);
Wynik:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Powrót typu funkcji
Ponownie, jest mało prawdopodobne, abyś jawnie podał true
lub false
do tej funkcji. Bardziej prawdopodobne jest, że będzie pochodzić ze zmiennej.
Ale możesz także użyć pg_typeof()
aby znaleźć typ zwracanej funkcji.
Oto przykład.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Wynik:
boolean
W tym przypadku przekazałem isfinite()
funkcji do pg_typeof()
funkcja jako jej argument.
A oto kolejny przykład. W tym otrzymuję typ danych wartości zwracanej przez make_date()
funkcja.
SELECT pg_typeof(make_date('1999', '09', '19'));
Wynik:
date
Typ danych kolumny
Oto przykład zwracania typu danych kolumny bazy danych.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Wynik:
timestamp without time zone
W tym przypadku sprawdziłem typ danych actor.last_update
kolumna w pagila
przykładowa baza danych.
Sprawdźmy inną kolumnę:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Wynik:
character
Ta kolumna jest wyświetlana jako bpchar
w moim interfejsie, który najwyraźniej jest wewnętrzną nazwą typu dla CHAR(n)
.
Przy okazji, możesz zapytać information_schema.columns
dla typu danych kolumny.
Dlatego zamiast tego moglibyśmy użyć następującego zapytania:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Wynik:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
W tym przypadku zwróciłem typ danych dla wszystkich kolumn w tabeli.