sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan pg_typeof() virker i PostgreSQL

I PostgreSQL er pg_typeof() funktionen giver dig mulighed for at få datatypen for enhver værdi.

Mere specifikt returnerer den OID'en for datatypen for den værdi, der sendes til den. Det returnerer en regtype , som er en OID-aliastype. Derfor er det det samme som et OID til sammenligningsformål, men vises som et typenavn.

Syntaks

Funktionen har følgende syntaks:

pg_typeof(any) 

Hvor any er enhver værdi.

Eksempel

Her er et grundlæggende eksempel at demonstrere.

SELECT pg_typeof(100); 

Resultat:

heltal

Vilkårlige strenge

I Postgres er der mere end én type streng (f.eks. char , varchar , text ). Derfor kan du ikke bare omgive et argument i enkelte anførselstegn og forvente, at det ved, hvad dets datatype er.

SELECT pg_typeof('Elephant');  

Resultat:

ukendt

Derfor bliver du nødt til at angive dens faktiske datatype.

SELECT pg_typeof('Elephant'::varchar);  

Resultat:

tegn varierende

I Postgres, character varying er navnet på varchar (faktisk varchar er alias for character varying ).

Dette sidste eksempel var lidt overflødigt, da jeg eksplicit angav variabeltypen, hvilket betød, at jeg allerede vidste, hvad resultatet ville blive.

I den virkelige verden er det mere sandsynligt, at du vil forsøge at få datatypen for en variabel.

Returtype for en variabel

I dette eksempel sætter jeg den forrige streng ind i en variabel og får derefter dens datatype.

DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ 

Resultat:

BEMÆRKNING:Værdi:ElephantType:karakter varierende

Her er den igen, bortset fra at jeg ændrer datatypen til en anden strengtype (char(8) ).

DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ 

Resultat:

BEMÆRKNING:Værdi:ElephantType:tegn

Boolske værdier

Her er et eksempel på eksplicit at angive en boolesk værdi.

SELECT pg_typeof(true), pg_typeof(false);

Resultat:

 pg_typeof | pg_typeof-----------+----------- boolean | boolesk

Returtype for en funktion

Igen, det er usandsynligt, at du eksplicit vil angive true eller false til denne funktion. Det er mere sandsynligt, at det kommer fra en variabel.

Men du kan også bruge pg_typeof() for at finde ud af en funktions returtype.

Her er et eksempel.

SELECT pg_typeof(isfinite(date '2020-07-18')); 

Resultat:

boolesk

I dette tilfælde bestod jeg isfinite() funktion til pg_typeof() fungere som dets argument.

Og her er endnu et eksempel. I denne får jeg datatypen for returværdien af ​​make_date() funktion.

SELECT pg_typeof(make_date('1999', '09', '19'));  

Resultat:

dato

Datatype for en kolonne

Her er et eksempel på returnering af datatypen for en databasekolonne.

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1; 

Resultat:

tidsstempel uden tidszone

I dette tilfælde tjekkede jeg datatypen for actor.last_update kolonne i pagila eksempeldatabase.

Lad os tjekke en anden kolonne:

SELECT pg_typeof(name)
FROM language
LIMIT 1; 

Resultat:

tegn

Denne kolonne vises som bpchar i min grænseflade, som tilsyneladende er det interne typenavn for CHAR(n) .

Forresten kan du forespørge information_schema.columns for datatypen for en kolonne.

Derfor kunne vi bruge følgende forespørgsel i stedet:

SELECT 
  column_name, 
  data_type 
FROM information_schema.columns
WHERE table_name = 'language'; 

Resultat:

 kolonnenavn | data_type -------------+------------------------------------ sprog_id | heltal navn | tegn sidste_opdatering | tidsstempel uden tidszone

I dette tilfælde returnerede jeg datatypen for alle kolonner i tabellen.


  1. Hvorfor justering af SQL-ydelse er den vigtigste evne til at håndtere databaser

  2. Pivotering af rækker til kolonner dynamisk i Oracle

  3. SQL, hvordan man sletter data og tabeller

  4. Søg med kommasepareret værdi mysql