sql >> Databáze >  >> RDS >> PostgreSQL

Jak funguje pg_typeof() v PostgreSQL

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.


  1. Nástroj pro obnovu zálohy SQL k opravě poškozené zálohy SQL – Recenze produktu – Příspěvek hosta od Daniela Jonese

  2. Jak vrátit ID na přílohách s Ibatis (s klíčovým slovem RETURNING)

  3. Migrace databáze Oracle do MySQL na AWS, část 2

  4. Dynamický SQL (předávání názvu tabulky jako parametru)