V PostgreSQL, pg_typeof()
funkce umožňuje získat datový typ libovolné hodnoty.
Přesněji řečeno, vrací OID datového typu hodnoty, která je mu předána. Vrací regtype
, což je typ aliasu OID. Proto je to stejné jako OID pro účely porovnání, ale zobrazuje se jako název typu.
Syntaxe
Funkce má následující syntaxi:
pg_typeof(any)
Kde any
je jakákoliv hodnota.
Příklad
Zde je základní příklad k demonstraci.
SELECT pg_typeof(100);
Výsledek:
integer
Libovolné řetězce
V Postgresu je více než jeden typ řetězce (např. char
, varchar
, text
). Proto nemůžete argument jen uzavřít do jednoduchých uvozovek a očekávat, že bude vědět, jaký je jeho datový typ.
SELECT pg_typeof('Elephant');
Výsledek:
unknown
Proto budete muset zadat jeho skutečný datový typ.
SELECT pg_typeof('Elephant'::varchar);
Výsledek:
character varying
V Postgresu character varying
je název pro varchar
(ve skutečnosti varchar
je alias pro character varying
).
Tento poslední příklad byl trochu nadbytečný, protože jsem výslovně uvedl typ proměnné, což znamenalo, že jsem již věděl, jaký bude výsledek.
V reálném světě je pravděpodobnější, že se budete snažit získat datový typ proměnné.
Typ návratu proměnné
V tomto příkladu jsem vložil předchozí řetězec do proměnné a poté získal její datový typ.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Výsledek:
NOTICE: Value: Elephant Type: character varying
Tady je to znovu, kromě toho, že změním datový typ na jiný typ řetězce (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Výsledek:
NOTICE: Value: Elephant Type: character
Booleovské hodnoty
Zde je příklad explicitního zadání booleovské hodnoty.
SELECT
pg_typeof(true),
pg_typeof(false);
Výsledek:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Typ návratu funkce
Opět je nepravděpodobné, že explicitně uvedete true
nebo false
na tuto funkci. Je pravděpodobnější, že bude pocházet z proměnné.
Ale můžete také použít pg_typeof()
zjistit návratový typ funkce.
Zde je příklad.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Výsledek:
boolean
V tomto případě jsem předal isfinite()
funkce na pg_typeof()
fungovat jako jeho argument.
A tady je další příklad. V tomto získám datový typ návratové hodnoty make_date()
funkce.
SELECT pg_typeof(make_date('1999', '09', '19'));
Výsledek:
date
Datový typ sloupce
Zde je příklad vrácení datového typu databázového sloupce.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Výsledek:
timestamp without time zone
V tomto případě jsem zkontroloval datový typ actor.last_update
ve sloupci pagila
ukázková databáze.
Podívejme se na další sloupec:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Výsledek:
character
Tento sloupec se zobrazí jako bpchar
v mém rozhraní, což je zřejmě interní název typu pro CHAR(n)
.
Mimochodem, můžete zadat dotaz na information_schema.columns
pro datový typ sloupce.
Proto bychom místo toho mohli použít následující dotaz:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Výsledek:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
V tomto případě jsem vrátil datový typ pro všechny sloupce v tabulce.