PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von pg_typeof() in PostgreSQL

In PostgreSQL der pg_typeof() Mit der Funktion können Sie den Datentyp eines beliebigen Werts abrufen.

Genauer gesagt gibt es die OID des Datentyps des Werts zurück, der ihm übergeben wird. Es gibt einen regtype zurück , bei dem es sich um einen OID-Aliastyp handelt. Daher ist es zu Vergleichszwecken dasselbe wie eine OID, wird aber als Typname angezeigt.

Syntax

Die Funktion hat folgende Syntax:

pg_typeof(any)

Wobei any ist irgendein Wert.

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung.

SELECT pg_typeof(100);

Ergebnis:

integer

Beliebige Zeichenfolgen

In Postgres gibt es mehr als einen String-Typ (z. B. char , varchar , text ). Daher können Sie ein Argument nicht einfach in einfache Anführungszeichen setzen und erwarten, dass es seinen Datentyp kennt.

SELECT pg_typeof('Elephant'); 

Ergebnis:

unknown

Daher müssen Sie den tatsächlichen Datentyp angeben.

SELECT pg_typeof('Elephant'::varchar); 

Ergebnis:

character varying

In Postgres character varying ist der Name für varchar (eigentlich varchar ist der Alias ​​für character varying ).

Dieses letzte Beispiel war etwas überflüssig, da ich den Variablentyp explizit angegeben hatte und somit bereits wusste, was das Ergebnis sein würde.

In der realen Welt ist es wahrscheinlicher, dass Sie versuchen, den Datentyp einer Variablen abzurufen.

Rückgabetyp einer Variablen

In diesem Beispiel füge ich die vorherige Zeichenfolge in eine Variable ein und erhalte dann ihren Datentyp.

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

Ergebnis:

NOTICE: Value: Elephant
Type: character varying

Hier ist es wieder, außer dass ich den Datentyp in einen anderen String-Typ ändere (char(8) ).

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

Ergebnis:

NOTICE: Value: Elephant
Type: character

Boolesche Werte

Hier ist ein Beispiel für die explizite Bereitstellung eines booleschen Werts.

SELECT 
  pg_typeof(true),
  pg_typeof(false); 

Ergebnis:

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

Rückgabetyp einer Funktion

Auch hier ist es unwahrscheinlich, dass Sie ausdrücklich true angeben oder false zu dieser Funktion. Es ist wahrscheinlicher, dass es von einer Variablen kommt.

Sie könnten aber auch pg_typeof() verwenden um den Rückgabetyp einer Funktion herauszufinden.

Hier ist ein Beispiel.

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

Ergebnis:

boolean

In diesem Fall habe ich das isfinite() übergeben Funktion zu pg_typeof() Funktion als sein Argument.

Und hier ist ein weiteres Beispiel. In diesem erhalte ich den Datentyp des Rückgabewerts von make_date() Funktion.

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

Ergebnis:

date

Datentyp einer Spalte

Hier ist ein Beispiel für die Rückgabe des Datentyps einer Datenbankspalte.

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;

Ergebnis:

timestamp without time zone

In diesem Fall habe ich den Datentyp von actor.last_update überprüft Spalte in der pagila Beispieldatenbank.

Sehen wir uns eine andere Spalte an:

SELECT pg_typeof(name)
FROM language
LIMIT 1;

Ergebnis:

character

Diese Spalte wird als bpchar angezeigt in meiner Schnittstelle, die anscheinend der interne Typname für CHAR(n) ist .

Übrigens können Sie information_schema.columns abfragen für den Datentyp einer Spalte.

Daher könnten wir stattdessen die folgende Abfrage verwenden:

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

Ergebnis:

 column_name |          data_type          
-------------+-----------------------------
 language_id | integer
 name        | character
 last_update | timestamp without time zone

In diesem Fall habe ich den Datentyp für alle Spalten in der Tabelle zurückgegeben.